在两个html标记之间提取文本

时间:2017-06-22 13:16:07

标签: bash shell

我正在尝试检索标签之间的文本。我正在与SunOS合作。

       [SESSIONID=9sfhksfksafa,LOGINID=1,CLIENTIP=1.22.34.5,REMOTEADDRESS=1.22.34.5] 2017-06-01T18:09:20  INFO transaction - Soap Outbound message: <soapenv:Envelope xmlns:soapenv="http://org.inq"><Id>Id1</Id><header><userID>321</userID><organization>abc</organization><countryCode>CA</countryCode><languageCode>en</languageCode><userLocation>internet</userLocation>
       <timestamp>2017-06-01T18:09:20.974-04:00</timestamp><channel>Mobile</channel>

我尝试了以下选项,但没有帮助:

      sed -e 's/<Id>\(.*\)</Id>/\1/'
      sed -n '/<Id>/,/<\/Id>/p' test1.txt > test2.txt

任何建议都会对我有所帮助。

1 个答案:

答案 0 :(得分:2)

如果grep支持PCRE

grep -Po '<Id>\K[^<]*'

,否则

perl -ne 'print "$_\n" for /<Id>\K[^<]*/g'

另一个选项bash

while IFS=\> read -d \< tag value; do echo "$tag $value"; done

或者变量包含字符串

var='<Id>2017-06-01T18:09:20.974-04:00</Id>'
var=${var#*<Id>}   #remove prefix
var=${var%</Id>*}  #remove suffix
echo "$var"