我有以下sed替换,如果在行中找到某个字符串,则用不同的文本替换整行。
sed "s/.*FOUNDSTRING.*/replacement \"text\" for line"/ test.txt
这很好用 - 但是,例如我想在'for'之后添加一个新行。我最初的想法是尝试这个:
sed "s/.*FOUNDSTRING.*/replacement \"text\" for \n line"/ test.txt
但最终将替换为以下内容:
replacement "text" for n line
期望的结果:
replacement "text" for
line
答案 0 :(得分:4)
在sed中使用换行符会很痛苦。根据您使用的版本,行为也存在一些差异。为了简单和便携,我建议使用awk:
awk '{print /FOUNDSTRING/ ? "replacement \"text\" for\nline" : $0}' file
如果模式匹配,则打印替换字符串,包括换行符,否则打印行$0
。
测试出来:
$ cat file
blah
blah FOUNDSTRING blah
blah
$ awk '{print /FOUNDSTRING/ ? "replacement \"text\" for\nline" : $0}' file
blah
replacement "text" for
line
blah
当然,不止一种方法可以给猫皮肤涂抹,如评论中所示:
awk '/FOUNDSTRING/ { $0 = "replacement \"text\" for \n line" } 1' file
当模式匹配时,这会用新字符串替换行$0
,并使用公共简写1
来打印每一行。