我想从我的扁平化的XML文件中删除一个节点,我的XML文件包含以下内容的XML文件:删除节点与sed的
...
<cellule ref="1111"/>
</blah>
<workdocument id="bar" classement="1"/>
<tablau id="35">
<cellule ref="1250"/>
<area id="foo">
<subarea>Ipsum Lorem Dolor</subarea>
<area>
...
我需要删除<workdocument id="bar" classement="1"/>
,所以从元素<workdocument
直到正在关闭 “/>
”
我试着用SED如下:
echo '<cellule ref="1111"/></blah><workdocument id="bar" classement="1"/><tablau id="35"><cellule ref="1250"/><area id="foo"><subarea>Ipsum Lorem Dolor</subarea><area>' |sed 's/<workdocument.*\/>//'
<cellule ref="1111"/></blah><area id="foo"><subarea>Ipsum Lorem Dolor</subarea><area>
但<cellule ref="1250"/><area id="foo">
也将被删除:/
请注意,属性classement的价值是不知道:/
谢谢
使用sed或类似工具处理XML(或其他结构化数据)通常不是一个好主意。你的输入仍然是有效的XML吗?您可能希望查看XML处理工具,如xmlstarlet。在这种情况下:'xmlstarlet ed -d // workdocument file.xml' – Wintermute
嗨,谢谢,是的,它仍然有效,为什么我试图使用sed反而是因为我将在bash脚本中使用它,而我不确定xmlstarlet是否安装在所有机器上。 – Zatla00
捆绑它,这是我的建议。或者依赖于像python这样的东西,它无处不在,并且在其标准库中有XML处理。使用sed处理XML的问题是,突然输入是有效的XML是不够的,它必须是XML,它的格式可以通过脚本可以处理的方式进行。例如,如果我在'
Wintermute