2016-06-21 6 views
-1

ich die folgende Ausgabe von curl haben:Wie kann ich Text zwischen zwei XML-Tags extrahieren mit sed

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'><env:Header></env:Header><env:Body><ns3:getNodesResponse xmlns:ns3='http://node.sdk.nms.ov.hp.com/'><return><item><created>2016-01-12T18:04:44.617Z</created><deviceCategory>com.hp.ov.nms.devices.other</deviceCategory><deviceDescription>No Device Profile found for this device. The assigned SNMP OID is the top of a Opto 22 subtree</deviceDescription><deviceFamily>com.hp.ov.nms.devices.opengear</deviceFamily><deviceModel>Opengear Generic</deviceModel><deviceVendor>com.hp.ov.nms.devices.opengear</deviceVendor><discoveryState>DISCOVERY_COMPLETED</discoveryState><endNode>false</endNode><>false</IPv4Router><id>330742910324</id><lanSwitch>false</><longName>xxxxxxxxxxxxxxxxx</longName><managementMode>MANAGED</managementMode><modified>2016-06-21T19:46:38.837Z</modified><name>xxxxxxxxxxxxxxx</name><notes></notes><snmpSupported>true</snmpSupported><snmpVersion>V2C</snmpVersion><status>NORMAL</status><systemContact>Unspecified (Management Console -&gt; Alerts &amp; Logging -&gt; SNMP)</systemContact><systemDescription>Linux xxxxx 3.10.0-uc0 #1 Mon Dec 21 16:21:01 EST 2015 armv4tl</systemDescription><systemLocation>Unspecified (Management Console -&gt; Alerts &amp; Logging -&gt; SNMP)</systemLocation><systemName>xxxxxx</systemName><systemObjectId>.1.3.6.1.4.1.25049.1.81</systemObjectId><uuid>e3a77c1c-ab82-4dfb-b7bf-78e1dadef888</uuid></item></return></ns3:getNodesResponse></env:Body></env:Envelope> 

Wie kann ich den Text zwischen <id> und </id> abrufen? I versucht, mit:

sed -e 's/<id>\(.*\)<\/id>/\1/' 

aber, dass die Ergebnisse in den gesamten Block von Text ausgedruckt werden, anstatt nur den Teil zwischen den und < \ id>.

Ich habe nicht die Möglichkeit, Programme auf dieser Box zu installieren, also würde ich lieber nicht die Mühe des manuellen Kompilierens von xmlstarlet, etc., nur um diese eine Sache zu extrahieren.

Antwort

1

Dank für das zu erklären, warum Sie mit den richtigen Tools nicht zu tun, die offensichtlich sind

sed -e 's/.*<id>\(.*\)<\/id>.*/\1/' 

Spiel, was Sie (nicht getestet)

+0

Dank nicht wollen! Ich hatte ursprünglich eine Python-Seifenlaugen-Bibliothek benutzt, die für diesen Zweck sehr gut funktionierte, aber ich konnte leider nicht, dass sie auf diesem bestimmten Computer richtig funktionierte – lacrosse1991

Verwandte Themen