ここには、次の内容を含む非常に単純なテキストファイルがあります。
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
答え2
欲しいと思うㅏ実際には保留コマンドです。 Bashまたはサポートされているシェルの使用$'\n'
(ほとんど):
sed $'/line2/a\\\n#this line was added by sed\n' file.txt
または、より読みやすく、sedコマンドファイルを使用してください。
/line2/a\
#this line was added by sed
完全な方法を表示:
$ cat file.txt
line1
line2
line3
line4
$ cat sedfile
/line2/a\
#this line was added by sed
$ sed -f sedfile file.txt
line1
line2
#this line was added by sed
line3
line4
$
答え3
これは仮想csh
シェルです:
1行ずつ追加するだけです。
% sed '/line2/a\\
# new line here\
' file
line1
line2
# new line here
line3
line4
別の行の前に行を挿入するには、次の手順を実行します。
% sed '/line3/i\\
# new line here\
' file
line1
line2
# new line here
line3
line4
1行を2つの新しい行に置き換えるには、次のコマンドを使用しますs
。
% sed 's/line2/&\\
# new line here/' file
line1
line2
# new line here
line3
line4
OpenBSD 6.1で動作し、sed
基本csh
システムでテストされています。