我有一个xml文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Station name="XxXx" >
<Inverter name="0701">
<String name="07.01.01-1">
<Converter sku="31570014-0900 A" sn="2116K000551" mac="548280000227" ts="01"/>
</String>
<String name="07.01.01-2">
<Converter sku="31570014-0900 A" sn="1716K000232" mac="4482800000E8" ts="02"/>
</String>
我需要一个脚本(或者更好的一个linux命令),它可以在这个文件中找到一个名为=&#34; 07.01.01-1&#34;的字符串。例如,更改 next 行sn =&#34; 2116K000551&#34;到sn =&#34; 11111111&#34;,删除所有内容直到行尾(表示mac =&#34; xxx&#34; ts =&#34; xx&#34;),除了结束标记&# 34; /&gt;&#34;,然后保存此文件。我试图用sed做这件事,但现在还不成功。是否有一个linux命令可以做到这一点?我非常感谢任何建议。
答案 0 :(得分:0)
使用 xmlstarlet
工具的正确方法:
xmlstarlet ed -u '//String[contains(@name, "07.01.01-1") and ./Converter/@sn = "2116K000551"]
/Converter/@sn' -v 11111111 \
-d '//String[contains(@name,"07.01.01-1")]
/Converter/@*[name()="mac" or name()="ts"]' file.xml
输出:
<?xml version="1.0" encoding="utf-8"?>
<Station name="XxXx">
<Inverter name="0701">
<String name="07.01.01-1">
<Converter sku="31570014-0900 A" sn="11111111"/>
</String>
<String name="07.01.01-2">
<Converter sku="31570014-0900 A" sn="1716K000232" mac="4482800000E8" ts="02"/>
</String>
</Inverter>
</Station>
要就地修改文件,请添加-L
选项:xmlstarlet ed -L -u ....