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

时间:2018-09-12 17:15:24

标签: xml shell chef 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)吗?

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

PS :我的Connector XML标记可以跨多行或单行。

1 个答案:

答案 0 :(得分:1)

使用

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

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