【发布时间】:2023-03-08 00:05:02
【问题描述】:
我正在使用这个 XML 文件:https://github.com/apache/ranger/blob/master/ugsync/src/test/resources/ranger-ugsync-site.xml
现在,我必须将以下属性的值更新为 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 到 false。我只需要更新这个属性的值而不是其他的。 输入/帮助表示赞赏。谢谢!
【问题讨论】:
-
嗯。我很想将其称为 parsing xml and replacing specific tags shell script 的重复项,它的答案中也包含 XMLLint 方法。理想情况下,希望找到一个带有 Python-wrapped-in-a-shell-function 答案的重复问题,因为这对于无论出于何种原因无法安装 XMLStarlet 并且没有足够新的人来说可能很有用XMLLint.
-
...顺便说一下,对于这类问题强烈首选支持 XML 的答案,因为标准的基于文本的工具只需'不,也不能,理解 XML。你不能教
grep和sed忽略 XML cmets 和 CDATA 部分,和阅读xmlns标签来找出当前的命名空间,阅读 DTD 并理解它们的任何宏包含等。