我想在bash脚本中解析下面的xml文本。
<os name="RedHat" os_version="6">
<package_manager type="name">rpm</package_manager>
<multipath_package_check type="command">rpm -qa | grep device-mapper-multipath</multipath_package_check>
<mpath_service_enable type="command">chkconfig multipathd on</mpath_service_enable>
<mpath_service_restart type="command">service multipathd restart</mpath_service_restart>
</os>
例如,如果元素属性与参数匹配,我需要具有如下函数来返回文本。
get_package_manager "RedHat" "6"
应该返回“rpm”
get_multipath_package_check "RedHat" "6"
应返回“rpm -qa | grep device-mapper-multipath”
感谢任何帮助。
答案 0 :(得分:0)
一些&#34; xml解析&#34;使用xml2
(apt-get install xml2
)程序,使用XML的平面表示更容易。
典型地:
$ xml2 < test.xml | grep package_manager= | cut -d= -f2
rpm
$ xml2 < test.xml | grep multipath_package_check= | cut -d= -f2
rpm -qa | grep device-mapper-multipath
但它不会解决任何问题。对于您无法使用xml2
轻松解决的问题,您可以尝试使用xpath表达您的查询并使用CLI中提供的任何xpath工具,例如xmllint:
$ xmllint --xpath '/os[@name="RedHat" and @os_version="6"]/package_manager/text()' test.xml
rpm
$ xmllint --xpath '/os[@name="RedHat" and @os_version="6"]/multipath_package_check[@type="command"]/text()' test.xml
rpm -qa | grep device-mapper-multipath