假设我有两个文件富和酒吧. 我想要替换字符串“这是测试“ 在富文件内容酒吧. 我怎样才能使用一行代码做到这一点sed?
我用过了:
sed -i.bak 's/this is test/$(cat bar)\n/g' foo
但字符串被替换为文字$(cat bar)
而不是内容bar
。我尝试使用引号,但结果仍然相同。
就引用而言,Radu 的回答是正确的。现在的问题是,假设我的 bar 文件包含:
this
is
a
test
file
现在如果我运行该命令,它会出现错误:
sed:-e 表达式 #1,字符 9:未终止的“s”命令
18次。
答案1
以下命令应该可以满足您的需要:
sed "s/this is test/$(cat bar)/" foo
如果foo
包含多行,那么您可以使用:
sed "s/this is test/$(sed -e 's/[\&/]/\\&/g' -e 's/$/\\n/' bar | tr -d '\n')/" foo
或者:
sed -e '/this is a test/{r bar' -e 'd}' foo
最后两个命令的来源:用其他文件的内容替换文件中的模式
要更改foo
文件,请使用sed -i
。
答案2
单程:
sed -e '/this is test/r bar' -e '/this is test/d' foo
示例结果:
$ cat bar
12
23
$ cat foo
ab
this is test
cd
this is test
ef
$ sed -e '/this is test/r bar' -e '/this is test/d' foo
ab
12
23
cd
12
23
ef
答案3
当你需要用文件的内容替换整行时,你可以使用r
插入文件并d
删除当前行:
sed -e "/regex/{r/path/to/file" -e "d}"