不要使用SED XML解析,因为它不是设计来处理XML的语法,写在SED的XML解析器是一项艰巨的任务。此外,还有许多有用的工具可以用于此目的。
考虑这个XML:
<root>
<item>
<errorCode>4000</errorCode>
<severity>2</severity>
<modelDescription>Some error</modelDescription>
</item>
<item>
<errorCode>4544</errorCode>
<severity>4</severity>
<modelDescription>Licensing: Invalid license</modelDescription>
</item>
</root>
您可以轻松地xmlstarlet
修改severity
值:
xmlstarlet ed -u '//item[severity = 4
and modelDescription = "Licensing: Invalid license"]/severity' \
-v 100 file.xml
命令更新(-u
)通过更换原值severity
元素的值(4
)与100
。 XPath表达式为所有item
元素选择severity
元素,其中severity
子值为4
和modelDescription
子值为Licensing: Invalid license
的子元素。
结果打印到标准输出。要就地编辑文件,请使用--inplace
选项:xmlstarlet ed --inplace -u ...
。
输出
<?xml version="1.0"?>
<root>
<item>
<errorCode>4000</errorCode>
<severity>2</severity>
<modelDescription>Some error</modelDescription>
</item>
<item>
<errorCode>4544</errorCode>
<severity>100</severity>
<modelDescription>Licensing: Invalid license</modelDescription>
</item>
</root>
请不要使用“巨大”之类的术语。使用数字(我们毕竟是工程师)。这可能会影响答案。 –