可能的重复:
将多行字符串插入另一个字符串
我有一个名为的文件,foo.txt其中包含:
富 酒吧 巴兹
我想bar用存储在变量中的多行字符串替换每次出现$bar:
1 2 3
导致:
富 1 2 3 巴兹
我可以awk使用以下方法做到这一点:
echo "$bar" | awk '{
如果(文件名==“-”)
{
如果(我!=“”)
{
我 = 我"\n"
}
我=我$0
}
别的
{
if($0 == "bar")
{
打印我
}
别的
{
打印
}
}
}'
但是,尝试在sedusing 中执行相同操作sed 's/bar/'"$bar"'/' foobar.txt会出现错误:
sed: 1: "s/bar/1 2 3/": 替代模式内未转义的换行符
这可以解决吗?
如果使用其他标准工具有更简单的方法来做到这一点,我也想知道。
在 中sed,必须在s命令的右侧转义换行符,因此您需要编写它:
sed 's/foo/1\
2\
3/g'
Run Code Online (Sandbox Code Playgroud)
一些sed实现还支持(非标准):
sed 's/foo/1\n2\n3/g'
Run Code Online (Sandbox Code Playgroud)
如果$bar要替换,您首先需要在每个换行符之前插入一个反斜杠。在此过程中,您还应该在每个斜杠、反斜杠和与号字符之前插入一个反斜杠。
就像是:
bar_escaped=$(printf '%s\n' "$bar" | sed 's,[\/&],\\&,g;s/$/\\/')
bar_escaped=${bar_escaped%?}
sed "s/foo/$bar_escaped/g"
Run Code Online (Sandbox Code Playgroud)