我的XML输入文件如下所示:
...
<logos>
<logo name="" primary="true" guid="c6aae8fe-bb04-4067-9b14-18b1bcf940d3" />
<logo name="" primary="false" guid="68b55f4d-f401-4180-b0e0-160974758348" />
</logos>
...
我需要删除内容,保留节点。预期产出:
<logos></logos>
我的命令如下:
sed -i 's|\(<logos>\)\(.+\)\(</logos>\)|\1\3|gi' $filename
但是它还没有用。我错过了什么?
修改:这不是delete node in a xml file with sed的重复:该问题是关于删除整个节点。在这里,我需要删除仅节点的内容。
答案 0 :(得分:0)
除c
命令外,您还可以使用地址范围:
sed -i.bak '/<logos>/,/<\/logos>/c<logos></logos>' $filename
答案 1 :(得分:0)
sed
等都是不错的选择
使用正确的XML / HTML解析器。
xmlstarlet
解决方案:
示例input.xml
:
<root>
<logos>
<logo name="" primary="true" guid="c6aae8fe-bb04-4067-9b14-18b1bcf940d3"/>
<logo name="" primary="false" guid="68b55f4d-f401-4180-b0e0-160974758348"/>
</logos>
</root>
xmlstarlet ed -O -d '//logos/*' input.xml
输出:
<root>
<logos/>
</root>