web-dev-qa-db-ja.com

すべての行の終わりにテキストを追加します

私はこのような多くのコマンドを試しました:

sed -i '' "s/$/<@string>/" txt.txt > txt2.txt

これにより、txt2.txtが空になります、なぜですか?!?

sed 's/$/<@string>/' txt.txt > txt2.txt

これはまったく何もせず、パス<string>は存在しません。

だから私は何をしますか、私はOSXを使用しているのでbsdsedを使用しています。

1
DisplayName

-iスイッチを使用すると、sedが元のファイルを編集します。つまり、出力がなく、出力がないため、リダイレクトするとファイルが空になります。

だから、あなたが欲しいのはどちらかです

sed -i '' 's/$/<@string>/' txt.txt

元のtxt.txtが変更されます。あるいは単に

 sed 's/$/<@string>/' txt.txt > txt2.txt
3
terdon

sedのオプション-iは、LinuxとUnixの間で完全に互換性がなく、他のオペレーティングシステムでは使用できない場合があります。

次に、-iとIOリダイレクト(>)を一緒に使用することはできません。これは、それ自体が除外されているためです。すでにファイルを変更しているインプレース編集を使用します。

したがって、ファイルをインプレースで(同じファイルに)編集する場合は、 ex を使用することをお勧めします。

ex +"%s/$/<@string>/g" -cwq foo.txt

文字列を置き換えて別のファイルに書き込むには、次のことを試してください。

ex +"%s/$/<@string>/g" +"w another.txt" -cq! foo.txt

コマンドexvi -eと同等です。

0
kenorb