加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

替换XML元素的值? sed正则表达式?

发布时间:2020-12-15 23:53:27 所属栏目:百科 来源:网络整理
导读:我想获取一个 XML文件并替换元素的值.例如,如果我的XML文件如下所示: abc xyzoriginal/xyz/abc 我想用另一个字符串替换xyz元素的原始值,无论它是什么,以便生成的文件如下所示: abc xyzreplacement/xyz/abc 你会怎么做?我知道我可以编写一个Java程序来执行
我想获取一个 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修饰符多次匹配模式

田田!这会将结果打印到stdout – 一旦您确认它执行了您想要的操作,请添加-i选项以告知它编辑该文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读