用XML文件中的实际值替换字符串占位符

时间:2018-01-28 10:11:03

标签: xml linux

我想将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。也没有工作。

我做错了什么?提前致谢

2 个答案:

答案 0 :(得分:2)

XML文件不仅仅是文本文件。在它们上使用sed(或其他类型的字符串替换功能)从根本上说是错误的。

使用了解XML工作原理的工具,不会犯sed很乐意犯的错误。 Linux下的XML感知工具的一个示例是xmlstarlet。另一个有用的是xmlshhomepage)。

xmlstarlet中,您可以使用XPath选择XML中的某个节点,并设置该节点的值。

xmlstarlet ed -u '//attribte[@name="IP"]' -v '100.100.19.56' filename.xml

操作并不比使用sed困难,但方法要好一百倍。

TODO:

  • 如果您不熟悉,请阅读XPath。
  • 查看xmlstarlet手册页,了解该工具可以执行的操作。这是非常多才多艺,值得了解。
  • 您还可以在此处浏览[xmlstarlet]标记,以查看几个示例。

答案 1 :(得分:0)

作为快速解决方法,您可以使用以下sed内容使其正常工作 -

$ sed -i -e "s/>\$IP\$</>100.100.19.56</g" filename.xml

PS - 正如@Tomalak解释的那样,考虑长期使用XML感知工具。