使用 Sed 用文件替换字符串

使用 Sed 用文件替换字符串

假设我有两个文件酒吧. 我想要替换字符串“这是测试“ 在文件内容酒吧. 我怎样才能使用一行代码做到这一点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}"

相关内容