Shell:如果属性不存在,则在 XML 元素中添加 属性

Shell: Adding property in XML element if the attribute is not present

我想编写一个 Chef Recipe 以在我的 XML 属性中添加一个 属性(如果属性不存在)并设置值(如果该属性存在)。

xml_file:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="false" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

如果 SSLEnabled 密钥不存在,我想为每个连接器标记添加一个新属性 SSLEnabled="true"。如果该属性已经存在,则将值更新为 "true"。

我可以考虑使用 shell 命令(最好是 grep/sed/awk)吗??

如果不是,哪种资源适合此用例?

P.S: 我的连接器 XML 标签可以跨越多行或单行。

使用

xmlstarlet ed --insert '//Connector[not(@SSLEnabled)]' \
              --type attr --name 'SSLEnabled' --value "true" \
           file.xml

要将输出保存到同一个文件中,请在 ed 子命令后添加 --inplace 选项。