如果某个值存在则更改 xml 标签的代码

如果某个值存在则更改 xml 标签的代码

此代码将标签值从 false 更改为 true如果存在错误的标签值(这正是我想要的)

如果xml 中的标签值为 true,因为它将 xml 中的所有标签更改为 true。只有当实际标签值存在且为 false 时,需要进行哪些编辑才能进行更改?

#!/bin/bash
linenumber=$(grep -n '<example>false</example>' test.xml | awk -F':' '{ print $1 }')
sed -i.old'' ${linenumber}s/false/true/ test.xml

答案1

显然,如果linenumber为空(因为grep没有找到匹配项),那么您的命令将成为全局寻址s/false/true/

您不需要尝试使用正则表达式匹配来提取行号,而是可以直接使用正则表达式匹配来处理 sed 命令,例如sed '\#<example>false</example>#s/false/true/'

然而,像 sed 和 grep 这样基于行的工具对于结构化文本来说确实是错误的方法 - 您应该考虑使用适当的 XML 工具xmlstarlet

相关内容