如何使用sed从两个xml标记之间提取文本

如何使用sed从两个xml标记之间提取文本,xml,linux,sed,Xml,Linux,Sed,我有curl的以下输出: <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&g

我有curl的以下输出:

<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>
2016-01-12T18:04:44.617Zcom.hp.ov.nms.devices.othern未找到此设备的设备配置文件。分配的SNMP OID是Opto 22子目录com.hp.ov.nms.devices.opengear Opengear Genericcom.hp.ov.nms.devices.opengear Discovery_Completed FalseFalse330429110324FalseXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMANAGED2016-06-06:46:38.837ZXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXLinux xxxxx 3.10.0-uc0#1 Mon Dec 21 16:21:01 EST 2015 armv4tlUnspecified(管理控制台-警报和日志记录-SNMP)xxxxxx.1.3.6.1.4.1.25049.1.81e3a77c1c-ab82-4dfb-b7bf-78e1dadef888
如何检索
之间的文本?我尝试使用:

sed -e 's/<id>\(.*\)<\/id>/\1/'
sed-e的/\(.\)/\1/'
但这会导致打印出整个文本块,而不仅仅是和之间的部分


我没有能力在这个盒子上安装程序,所以我不想为了提取这一点而经历手动编译xmlstarlet等的麻烦

感谢您解释为什么您没有使用正确的工具来做显而易见的事情

sed -e 's/.*<id>\(.*\)<\/id>.*/\1/'
sed-e的/*\(.\)./\1/'
匹配您不想要的(未经测试)

谢谢!我最初使用的是一个pythonsuds库,该库为此目的运行得非常好,但不幸的是,我无法使它在这台特定的机器上正常工作