从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结果中提取字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用grep从JSON中提取字符串

如何使用 sed/grep 提取两个单词之间的文本?

从文件中提取包含大量字符串之一的行

如何提取R的strsplit()的结果[重复]

如何从字符串中提取带有“”的对象[重复]

从字符串中提取数字[重复]