【问题标题】:Extracting strings from grep result [duplicate]从grep结果中提取字符串[重复]
【发布时间】: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 命令以仅在屏幕或文件中以列格式获取这些值。

【问题讨论】:

    标签: linux bash shell awk 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
    猜你喜欢
    • 2018-09-13
    • 2017-03-22
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2018-06-11
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多