gpt4 book ai didi

xml - 替换 XML 元素的值? Sed正则表达式?

转载 作者:数据小太阳 更新时间:2023-10-29 01:53:39 24 4
gpt4 key购买 nike

我想获取一个 XML 文件并替换一个元素的值。例如,如果我的 XML 文件如下所示:

<abc>
<xyz>original</xyz>
</abc>

我想用另一个字符串替换 xyz 元素的原始值,无论它是什么,这样生成的文件如下所示:

<abc>
<xyz>replacement</xyz>
</abc>

你会怎么做?我知道我可以编写一个 Java 程序来执行此操作,但我认为这对于替换单个元素的值来说有点矫枉过正,并且可以使用 sed 使用正则表达式进行替换来轻松完成此操作。然而,我对这个命令还不是新手,我希望读到这篇文章的好心人能够给我提供正确的正则表达式来完成这项工作。

一个想法是做这样的事情:

sed s/\<xyz\>.*\<\\xyz\>/\<xyz\>replacement\<\\xyz\>/ <original.xml >new.xml

也许我最好只用我想要的内容替换文件的整行,因为我会知道元素名称和我想使用的新值?但这假设所讨论的元素在一行中,并且没有其他 XML 数据在同一行中。我宁愿有一个命令,基本上用我指定的新字符串替换元素 xyz 的值,而不必担心元素是否全部在一行上,等等。

如果 sed 不是这项工作的最佳工具,请联系我以获得更好的方法。

如果有人能引导我朝着正确的方向前进,我将非常感激,您可能会节省我数小时的反复试验时间。提前致谢!

--詹姆斯

最佳答案

sed不会是用于多行替换的简单工具。可以使用其 N 来实现它们命令和一些递归,在阅读每一行后检查是否找到了标签的结尾......但它并不漂亮,你永远不会记得它。

当然,实际解析 xml 和替换标签将是最安全的事情,但如果您知道不会遇到任何问题,您可以试试这个:

perl -p -0777 -e 's@<xyz>.*?</xyz>@<xyz>new-value</xyz>@sg' <xml-file>

分解:

  • -p告诉它循环输入并打印
  • -0777告诉它使用文件末尾作为输入分隔符,这样它就可以一口气把所有的东西都放进去
  • -e意味着我要你做的事情来了

替换本身:

  • 使用@作为分隔符,因此您不必转义 /
  • 使用*? ,非贪婪版本,尽可能少地匹配,所以我们不会一直走到最后一次出现 </xyz>。在文件中
  • 使用s让修饰符 .匹配换行符(以获取多行标记值)
  • 使用g多次匹配模式的修饰符

多田!这会将结果打印到标准输出 - 一旦您确认它按照您的要求进行操作,请添加 -i告诉它就地编辑文件的选项。

关于xml - 替换 XML 元素的值? Sed正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1348124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com