在linux中查找字符串并替换另一行[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在linux中查找字符串并替换另一行[关闭]相关的知识,希望对你有一定的参考价值。
我有一个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命令可以做到这一点?我非常感谢任何建议。
答案
使用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 ....
以上是关于在linux中查找字符串并替换另一行[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在一个字符串中查找源 na 替换参数并在另一个字符串中执行替换