此代码将标签值从 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
。