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;
我想从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:命令后的额外字符
答案 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匹配(可以是两者)。