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

标签 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。也没有用。

我做错了什么?提前致谢

最佳答案

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/

相关文章:

java - 如何在 Java 中解析包含 XML 的字符串并检索根节点的值?

xml - 带有 Null 的 Oracle SELECT XMLELEMENT

linux - Linux IPSEC 是否支持使用 AES GMAC 的 AH 传输?

linux - 帮助我从 ABS 指南中理解 bash 中的这个简单的 io 重定向

c++ - g++ unicode 字符 ifstream

python - 从一个文件解析特定的 XML 属性并将其附加到另一个文件中,前提是第二个文件中存在另一个属性

xml - 去: Unmarshall XML List containing different entities

python - 读取大型 XML 时如何系统地避免或忽略超出范围的子索引

php - 在ubuntu系统上用xampp安装两个版本的php

linux - 如何避免由于套接字文件导致的Linux移动错误?