包括sed更换中的断线

时间:2015-06-18 13:54:49

标签: regex bash sed newline

我有以下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

1 个答案:

答案 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来打印每一行。