我想将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
。也没有工作。
答案 0 :(得分:2)
XML文件不仅仅是文本文件。在它们上使用sed
(或其他类型的字符串替换功能)从根本上说是错误的。
使用了解XML工作原理的工具,不会犯sed
很乐意犯的错误。 Linux下的XML感知工具的一个示例是xmlstarlet
。另一个有用的是xmlsh
(homepage)。
在xmlstarlet
中,您可以使用XPath选择XML中的某个节点,并设置该节点的值。
xmlstarlet ed -u '//attribte[@name="IP"]' -v '100.100.19.56' filename.xml
操作并不比使用sed
困难,但方法要好一百倍。
TODO:
xmlstarlet
手册页,了解该工具可以执行的操作。这是非常多才多艺,值得了解。答案 1 :(得分:0)
作为快速解决方法,您可以使用以下sed
内容使其正常工作 -
$ sed -i -e "s/>\$IP\$</>100.100.19.56</g" filename.xml
PS - 正如@Tomalak解释的那样,考虑长期使用XML感知工具。