2016-05-20 10 views
0

Ich möchte den untenstehenden XML-Text im Bash-Skript analysieren.Parsen von XML-Elementen mit Attributen im Bash-Skript

<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> 

Zum Beispiel, ich brauche Funktionen haben wie unter den Text zurück, wenn Element Attribute, die Argumente entsprechen.

get_package_manager "RedHat" "6" 

sollte "rpm" return

get_multipath_package_check "RedHat" "6" 

sollte zurückgeben "rpm -qa | grep device-mapper-multipath"

jede Hilfe dankbar.

+0

Versuchen Sie nicht, mit Hilfe von XML-Tools wie 'bash' zu analysieren , 'sed' oder' awk'. So liegt der Wahnsinn. Verwenden Sie etwas XML-aware, wie 'xmlstarlet'. –

Antwort

0

Einige "XML-Parsing" sind einfacher mit einer flachen Darstellung von XML zu tun, mit dem xml2 (apt-get install xml2) Programm.

Typisch:

$ 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 

Aber es wird nicht alles lösen. Für das Problem, das Sie mit xml2 nicht leicht lösen können, können Sie Ihre Abfrage mit XPath und die Verwendung jedes XPath-Tool zur Verfügung in CLI wie xmllint versuchen ausdrücken:

$ 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 
+0

Super, vielen Dank für die Antwort. Genau das habe ich gesucht. – skrish

+0

Vorschläge, wenn die Option "xpath" bei xmllint nicht verfügbar ist. Nur die neueste Version von xmllint scheint diese Option zu haben. – skrish

+0

@skrish http://stackoverflow.com/questions/15461737/how-to-execute-xpath-on-liner-from-shell –