Chinaunix

标题: 用shell根据报文体中的字段,将整个报文全部打印出来 [打印本页]

作者: kangshao    时间: 2010-12-02 10:42
标题: 用shell根据报文体中的字段,将整个报文全部打印出来
比如有个报文
<Request>
  <MsgType>xxxxxxxxxxxxx</MsgType>
  <TransactionID>xxxxxxxxxxxx</TransactionID>
  <Sender_Address>
    <UserName></UserName>
    <From>xxx</From>
    <UserPasswd></UserPasswd>
  </Sender_Address>
  <Channel_ID>xxxxx</Channel_ID>
  <CPID>xxx</CPID>
  <PackageID>XXXXXXXXXX</PackageID>
  <CPServiceID>xxxxx</CPServiceID>
  <OrderMonth>xxxx</OrderMonth>
  <SPID>xxxx</SPID>
</Request>

有什么方法能根据报文的中的一节:如  <PackageID>XXXXXXXXXX</PackageID>
然后将报文上下文全部打印出来
报文行数不定。
作者: kangshao    时间: 2010-12-02 11:00
那位大拿帮帮忙啊
作者: ywlscpl    时间: 2010-12-02 11:10
回复 1# kangshao


    这样?

ywlscpl@ubuntu:~$ cat file
<Request>
  <MsgType>xxxxxxxxxxxxx</MsgType>
  <CPID>xxx</CPID>
  <PackageID>222</PackageID>
  <SPID>xxxx</SPID>
</Request>

<Request>
  <CPID>xxx</CPID>
  <PackageID>111</PackageID>
  <CPServiceID>xxxxx</CPServiceID>
  <SPID>xxxx</SPID>
</Request>

ywlscpl@ubuntu:~$ awk -v RS="</Request>" -F "\n" '{for (i=1;i<=NF;i++) if ($i~/<PackageID>222<\/PackageID>/) print $0RT}' file
<Request>
  <MsgType>xxxxxxxxxxxxx</MsgType>
  <CPID>xxx</CPID>
  <PackageID>222</PackageID>
  <SPID>xxxx</SPID>
</Request>
ywlscpl@ubuntu:~$
作者: L_kernel    时间: 2010-12-02 21:46
那位大拿帮帮忙啊
kangshao 发表于 2010-12-02 11:00



    这个意思吗?
  1. $ grep -A 1 -B 1 'PackageID' file1
  2. <CPID>xxx</CPID>                     
  3. <PackageID>XXXXXXXXXX</PackageID>                           
  4. <CPServiceID>xxxxx</CPServiceID>
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2