【问题标题】:how to grep a log and print multiple string or text from a log如何grep日志并从日志中打印多个字符串或文本
【发布时间】:2018-09-24 02:40:53
【问题描述】:

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>

我想从 test.log 打印: OBJECT=NoticeBService business_rule_exception-Server.704:“活动”状态。

我用过:sed -n '/providerErrorText/,/providerErrorText/p' |剪切-d'|' -f 7 测试日志

我得到输出: OBJECT=通知B服务 sed: -e 表达式 #1, char 31: 命令后的多余字符

【问题讨论】:

  • 我尝试使用 sed -n '//,//p' |剪切-d'|' -f 7 测试日志
  • 我得到的输出为 -> OBJECT=NoticeBService sed: -e expression #1, char 31: extra characters after command
  • 我想要 BOLD String 作为输出:->OBJECT=NoticeBService

标签: unix awk sed scripting cut


【解决方案1】:

grep

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

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

说明

OBJECT[^|]+ 寻找文字“OBJECT”并匹配直到一个管道符号

(?&lt;=providerErrorText&gt;)look-behind,找到模式但不捕获 [^&lt;]+ 捕获直到&lt; 标志之前的所有内容

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

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

【讨论】:

  • 如果可能的话,你能解释一下它是如何工作的吗
猜你喜欢
  • 2016-12-11
  • 2019-06-13
  • 2017-08-10
  • 2015-07-25
  • 2013-05-15
  • 1970-01-01
  • 2018-08-28
  • 2017-12-26
  • 2022-10-14
相关资源
最近更新 更多