如何使用 sed 将字符串替换为包含符号的文件内容

如何使用 sed 将字符串替换为包含符号的文件内容

我的一个文件中有一个单词,我想用 xml 文件内容替换该单词。考虑到 xml 文件包含一些 sed 无法处理的符号,所以我使用的命令不起作用。我该如何解决这个问题?

sed -i "s/test/$(cat header)/g" test.xml

答案1

或许:

$ var="$(printf '%q' "$(cat header)")"
$ sed -i "s,test,$var,g" test.xml

答案2

如果该单词test本身就是一行,那么s您不必尝试使用(替换)命令,而是可以使用命令r从文件中读取内容并插入,然后在之后删除原始行:

sed -e '/test/{r header' -e 'd;}' test.xml

这种方式避免了对 shell 特殊字符的解释,也避免了对正则表达式元字符和对/shell 来说不是特殊的字符(因此不会被转义printf '%q')的解释。

也可以看看:

相关内容