我的一个文件中有一个单词,我想用 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'
)的解释。
也可以看看: