我想将 xml 文件中的字符串替换为 IP 地址:
字符串是:$IP$
; IP 地址:100.100.19.56
,这是 $IP$
所在的行:
<attribute name= "IP" assType = "1" tag = "8">$IP$</attribute>
我尝试使用:sed -i 's/$IP$/100.100.19.56/g' filename.xml
,但它不起作用。
我也这样试过:sed -i 's/"$IP$"/100.100.19.56/g' filename.xml
。也没有用。
我做错了什么?提前致谢
最佳答案
XML 文件不仅仅是文本文件。在它们上使用 sed
(或其他类型的字符串替换功能)从根本上说是错误的。
使用了解 XML 工作原理并且不会犯 sed
会很乐意犯的错误的工具。 xmlstarlet
是 Linux 下可识别 XML 的工具的一个示例。另一个强大的是 xmlsh
( homepage )。
在 xmlstarlet
中,您可以使用 XPath 选择 XML 中的某个节点并设置该节点的值。
xmlstarlet ed -u '//attribte[@name="IP"]' -v '100.100.19.56' filename.xml
操作并不比使用sed
困难,但方法要好一百倍。
待办事项:
- 如果您不熟悉 XPath,请阅读。
- 查看
xmlstarlet
手册页,大致了解该工具的功能。它用途广泛,值得了解。 - 您还可以浏览 [xmlstarlet]在 SO 上标记此处以查看几个示例。
关于xml - 用 XML 文件中的实际值替换字符串占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48485191/