使用 sed 在 xml 文件中查找并替换

2024-01-01

我需要查找并替换特定 xml 元素的值。条件如下:

  • 元素的值enabled必须从0 to 1;
  • enabled必须是一个孩子somenode element

我的测试 xml 如下所示:

<somenode name="node1">
    <some></some>
    <enabled>0</enabled>
    <some></some>
</somenode>

<someothernode name="node2">
    <some></some>
    <enabled>0</enabled>
    <some></some>
</someothernode>

<somenode name="node3">
    <some></some>
    <enabled>0</enabled>
    <some></some>
</somenode>

我预计第一和第三enabled元素将被改变。到目前为止,我已经成功编写了这个 sed 命令:

sed -n "1h;1!H;${;g;s|\(<somenode [^>]*>\)\(.*\)\(<enabled>\s*\)0\(\s*</enabled>\)\(.*</somenode>\)|\1\2\3 1 \4\5|g;p;}" test.xml

但它只改变了最后一个,我相信这是由于贪婪匹配。 任何帮助,将不胜感激。


尝试使用正则表达式来解析 XML 通常不是一个好主意。请参阅之前的讨论,例如在 Java 中使用 REGEX 解析 XML https://stackoverflow.com/questions/335250/parsing-xml-with-regex-in-java。 (实际上,您的 XML 格式不正确,因为它没有一个根元素)。几乎每种语言都有许多不同的(免费)XML 引擎用于解析和操作 XML,我建议您使用其中一个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 sed 在 xml 文件中查找并替换 的相关文章

随机推荐