从grep结果中提取字符串[重复]
Posted
技术标签:
【中文标题】从grep结果中提取字符串[重复]【英文标题】:Extracting strings from grep result [duplicate] 【发布时间】:2019-04-16 14:11:45 【问题描述】:我正在运行这个命令来从我们的日志文件中提取一些数据。 我得到了完整的线路,但我对与消息 ID 关联的值感兴趣。
我正在运行的命令 -
grep -B 2 UPDATE_CHAIR_DESK_REQ Application.log | head -1000
我得到的输出
< MessageId :ID:414d51204541495052475731202020205143d55bf3f13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>
--
< MessageId :ID:414d51204541495052475731202020205143d55bf7f13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>
--
< MessageId :ID:414d51204541495052475731202020205143d55bf7f13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>
--
< MessageId :ID:414d51204541495052475731202020205143d55bfbf13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>
--
< MessageId :ID:414d51204541495052475731202020205143d55bfbf13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>
--
< MessageId :ID:414d51204541495052475731202020205143d55bfff13821>
< AppServiceID :abcfcdd>
< ReplyToQName :UPDATE_CHAIR_DESK_REQ>**
我正在寻找的是 MessageId :ID: 前面的值,它的长度始终为 48 个字符。我想增强我的 grep 命令以仅在屏幕或文件中以列格式获取这些值。
【问题讨论】:
【参考方案1】:使用 awk,您可以使用:
awk -F'[:>]' '
$1 ~ /MessageId/ msgId = $3
$2 == "UPDATE_CHAIR_DESK_REQ" print msgId
' Application.log
【讨论】:
谢谢格伦,它完全符合我的要求。【参考方案2】:grep -B 2 UPDATE_CHAIR_DESK_REQ Application.log | egrep -o ':ID:.48'
【讨论】:
要获得just id,您可以使用grep -oP 'MessageId :ID:\K.48'
或添加| cut -d: -f3
以上是关于从grep结果中提取字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章