在linux中查找字符串并替换另一行[关闭]

问题描述 投票:0回答:1

我有一个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命令),它可以在这个文件中找到一个名为“07.01.01-1”的字符串,并在下一行中将sn =“2116K000551”更改为sn =“11111111”,删除所有内容直到行尾(表示mac =“xxx”ts =“xx”),但结束标记“/>”除外,并保存此文件。我正在尝试用sed做,但现在还不成功。是否有一个linux命令可以做到这一点?我非常感谢任何建议。

linux string sed replace
1个回答
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 ....

© www.soinside.com 2019 - 2024. All rights reserved.