改行なしで$ something >> file.txtをエコーするにはどうすればよいですか?


81

Iのecho $something >> file.txt場合、新しい行がファイルに追加されます。

新しい行なしで追加したい場合はどうすればよいですか?


3
注意してくださいecho $something、その動作はIFS変数に依存し、文字が消えてしまう可能性があります。次を試すことができます:var="hello world"; echo $var(helloとworldの間に2つのスペース)またはvar="hello world"; IFS='l'; echo $varまたはvar="-e hello \\n world"; echo $var。これを解決するには、次のように変数を二重引用符で囲むecho "$var"か、を使用しますprintf
jfg956

回答:


96

それがそのecho -nためです。


4
に相当するものはありcatますか?(たとえばsomething.txt、変数ではなくファイルがある場合$something
-cboettig

1
@cboettig:いいえ。別のツールを使用して、最終改行以外のすべてを印刷します。
イグナシオバスケス-アブラムス

@cboettig、catはデフォルトでは出力に何も追加しないため、catに '-n'パラメーターは必要ありません。例えば、あなたのファイルは、あなたのシェルプロンプトは、右のファイルの最後の文字の後に印刷されていない新しい行にされ、最後の行に改行コードを持っていない場合
ロンド

41

printfは非常に柔軟で、より移植性がありechoます。C / Perl / etcの実装と同様に、フォーマット文字列を終了しない場合、\n改行は出力されません。

printf "%s" "$something" >> file.txt

7

コマンドの出力を使用している場合、xargsをechoと組み合わせて使用​​できます

/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts

0

tr 別の選択肢です。

echo入力として使用している場合は、どちらを取得できますtr -d '\n'

この手法は、他のコマンドからの出力をパイプするときにも機能します(1行の出力のみで)。さらに、ファイルにUNIXまたはDOSの行末文字があるかどうかわからない場合は、を使用できますtr -d '\n\r'

これが機能することを示すいくつかのテストがあります。

改行が含まれます:

something='0123456789' ; echo ${something} | wc -c
11

UNIX改行:

something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10

DOSスタイル:

something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10

BSD trおよびGNUでテスト済みtr

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.