我正在使用此XML文件:but described in full here
现在,我必须将以下属性的值更新为false。
<property>
<name>ranger.usersync.group.usermapsyncenabled</name>
<value>true</value>
</property>
要将XML中的属性值更新为false,我在bash脚本中使用以下命令来完成更新。
tag1=<name>ranger.usersync.group.usermapsyncenabled</name>
file=xml_file.xml
temporary=temp.xml
grep -A1 $tag1 $file | grep -v $tag1 | sed -e "s/^.*<value>/<value/" | sed -e "s/<value>true<\/value>/<value>false<\/value>/g" $file > $temporary
问题:脚本正在更新文件中的所有其他属性,其值为true。我只需要更新此属性的值而不是其他属性。 感谢输入/帮助。谢谢!
答案 0 :(得分:4)
使用XMLStarlet:
xmlstarlet ed \
-u "//property[name='ranger.usersync.group.usermapsyncenabled']/value" \
-v false \
<in.xml >out.xml
用于确定要更改内容的XPath表达式确保我们仅使用相应的value
修改property
下的name
。