BSDのcshでsedを使用して1行を2行に置き換える方法は?

BSDのcshでsedを使用して1行を2行に置き換える方法は?

ここには、次の内容を含む非常に単純なテキストファイルがあります。

line1
line2
line3
line4

sed(または他のアプリケーション)を介してコンテンツを変更したいです。

line1
line2
#this line was added by sed
line3
line4

だから試してみましたが、sed -e "s/line2/line2\\n#this line was added by sed/" my-text-file-here.txt結果は次のとおりです。

line1
line2\n#this line was added by sed
line3
line4

正しく行う方法についてのアイデアはありますか?ありがとう

ベストアンサー1

GNU sedを使用すると、コードは正しく機能します。

$ sed -e 's/line2/line2\n#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4

ただし、BSD sed では、\n代替テキストでは改行文字は考慮されません。シェルがbashの場合、良い回避策は$'...'改行を挿入することです。

$ sed -e $'s/line2/line2\\\n#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4

bashに加えて、zshとkshもサポートされています$'...'

別のオプションは、実際の改行文字を挿入することです。

$ sed -e 's/line2/line2\
#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4

アップデート:cshの最後のオプションには追加が必要です\

% sed -e 's/line2/line2\\
#this line was added by sed/' file
line1
line2
#this line was added by sed
line3
line4

おすすめ記事