私はこのような多くのコマンドを試しました:
sed -i '' "s/$/<@string>/" txt.txt > txt2.txt
これにより、txt2.txtが空になります、なぜですか?!?
sed 's/$/<@string>/' txt.txt > txt2.txt
これはまったく何もせず、パス<string>
は存在しません。
だから私は何をしますか、私はOSXを使用しているのでbsdsedを使用しています。
-i
スイッチを使用すると、sed
が元のファイルを編集します。つまり、出力がなく、出力がないため、リダイレクトするとファイルが空になります。
だから、あなたが欲しいのはどちらかです
sed -i '' 's/$/<@string>/' txt.txt
元のtxt.txt
が変更されます。あるいは単に
sed 's/$/<@string>/' txt.txt > txt2.txt
sed
のオプション-i
は、LinuxとUnixの間で完全に互換性がなく、他のオペレーティングシステムでは使用できない場合があります。
次に、-i
とIOリダイレクト(>
)を一緒に使用することはできません。これは、それ自体が除外されているためです。すでにファイルを変更しているインプレース編集を使用します。
したがって、ファイルをインプレースで(同じファイルに)編集する場合は、 ex
を使用することをお勧めします。
ex +"%s/$/<@string>/g" -cwq foo.txt
文字列を置き換えて別のファイルに書き込むには、次のことを試してください。
ex +"%s/$/<@string>/g" +"w another.txt" -cq! foo.txt
コマンドex
はvi -e
と同等です。