在 sed 替换中包括断行
Including break line in sed replacement
我有以下 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
在 sed 中使用换行符可能会很痛苦。根据您使用的版本,行为也存在一些差异。为了简单性和可移植性,我建议使用 awk:
awk '{print /FOUNDSTRING/ ? "replacement \"text\" for\nline" : [=10=]}' file
如果模式匹配,则打印替换字符串,包括换行符,否则打印行 [=13=]
.
正在测试:
$ cat file
blah
blah FOUNDSTRING blah
blah
$ awk '{print /FOUNDSTRING/ ? "replacement \"text\" for\nline" : [=11=]}' file
blah
replacement "text" for
line
blah
当然给猫剥皮的方法不止一种,如评论所示:
awk '/FOUNDSTRING/ { [=12=] = "replacement \"text\" for \n line" } 1' file
这会在模式匹配时用新字符串替换行 [=13=]
并使用常见的 shorthand 1
来打印每一行。
我有以下 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
在 sed 中使用换行符可能会很痛苦。根据您使用的版本,行为也存在一些差异。为了简单性和可移植性,我建议使用 awk:
awk '{print /FOUNDSTRING/ ? "replacement \"text\" for\nline" : [=10=]}' file
如果模式匹配,则打印替换字符串,包括换行符,否则打印行 [=13=]
.
正在测试:
$ cat file
blah
blah FOUNDSTRING blah
blah
$ awk '{print /FOUNDSTRING/ ? "replacement \"text\" for\nline" : [=11=]}' file
blah
replacement "text" for
line
blah
当然给猫剥皮的方法不止一种,如评论所示:
awk '/FOUNDSTRING/ { [=12=] = "replacement \"text\" for \n line" } 1' file
这会在模式匹配时用新字符串替换行 [=13=]
并使用常见的 shorthand 1
来打印每一行。