使用bash脚本在xml中设置单个属性的属性值

时间:2018-02-25 19:02:33

标签: xml linux bash shell sed

我正在使用此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。我只需要更新此属性的值而不是其他属性。 感谢输入/帮助。谢谢!

1 个答案:

答案 0 :(得分:4)

使用XMLStarlet

xmlstarlet ed \
  -u "//property[name='ranger.usersync.group.usermapsyncenabled']/value" \
  -v false \
  <in.xml >out.xml

用于确定要更改内容的XPath表达式确保我们仅使用相应的value修改property下的name