如何grep日志并从日志中打印多个字符串或文本

时间:2018-04-13 17:08:23

标签: unix awk sed scripting cut



ERROR|2017-04-04 06:27:20|ID=15098|ST=2018-04-0406:27:21|TYPE=Log|LOG=6|OBJECT=NoticeBService|T_TIME=10|REQUEST_MSG=<Envelope><Header><ns11:messageId>184745460</ns11:messageId><ns11:messageDateTime>2018-04-13T11:27:21Z</ns11:messageDateTime></Header></Envelope>|RESPONSE_MSG=<Envelope><Header><m:messageId>184460</m:messageId><m:messageDateTimeStamp>2018-04-04T06:27:21-05:00</m:messageDateTimeStamp></m:trackingMessageHeader></m:wsMessageHeader></Header><Body><Fault><faultcode>Server.704</faultcode><detail><ns1:providerError><ns1:providerErrorCode>704</ns1:providerErrorCode><ns1:providerErrorText>business_rule_exception-Server.704: 'Active'status.</ns1:providerErrorText></ns1:providerError></detail></Fault></Body></Envelope>
&#13;
&#13;
&#13;

我想从test.log打印: 的 OBJECT = NoticeBService business_rule_exception-Server.704:&#39; Active&#39; status。

我用过:sed -n&#39; / providerErrorText /,/ providerErrorText / p&#39; | cut -d&#39; |&#39; -f 7 test.log

我得到输出: OBJECT = NoticeBService sed:-e表达式#1,char 31:命令后的额外字符

1 个答案:

答案 0 :(得分:0)

grep

$ grep -oP 'OBJECT[^|]+|(?<=providerErrorText>)[^<]+' file

OBJECT=NoticeBService
business_rule_exception-Server.704: 'Active'status.

<强>解释

  

OBJECT[^|]+寻找文字&#34; OBJECT&#34;并匹配,直到管道符号

     

(?<=providerErrorText>)后视,找到模式但不捕获   [^<]+捕获所有内容,直至<符号

     

-oP o仅用于输出匹配的模式,P用于perl兼容性(此处为后视匹配)。

     

pattern1|pattern2适用于pattern1或pattern2匹配(可以是两者)。