【问题标题】:Extract values from logs从日志中提取值
【发布时间】:2015-01-09 03:46:40
【问题描述】:

想要提取以下日志中最后一次出现 [] 之间的数据。

[11/10/14 9:20:57:133 GMT] 000002d2 EmailAdapterE I   Processing Email :: [****][****@hotmail.com][0][1][63][4][4670][0][2014-11-24][12]
[11/10/14 9:20:57:110 GMT] 000002d2 EmailAdapterE I   Processing Email :: [****][****@aol.com][0][1][63][1][3286][0][2014-11-24][10]
[11/10/14 9:20:57:088 GMT] 000002d2 EmailAdapterE I   Processing Email :: [****][*****@pietrawoodandstone.com][1][1][63][1][3455][2000][2014-11-24][26]

从此我想要行中最后一个 [] 之间的值。

例如从上面的行...我想要以下输出

12
10
26

尝试了awkcutsed,但没有成功

【问题讨论】:

    标签: unix awk scripting grep cut


    【解决方案1】:

    awk是你的朋友:

    $ awk -F[][] '{print $(NF-1)}' file
    12
    10
    26
    

    这会将字段分隔符设置为[]。基于此,倒数第二个字段包含您想要的内容,因此我们将其打印为$(NF-1)

    注意sed 也可以使用一些正则表达式:

    $ sed -r 's/.*\[([0-9]*)\]$/\1/' file
    12
    10
    26
    

    这会捕获[] 中包含的最后一个数字块,并使用\1 将其打印回来。

    使用grep,您还可以使用后视和前瞻来匹配[] + 行尾之间的内容:

    $ grep -Po '(?<=\[)[0-9]*(?=]$)' file
    12
    10
    26
    

    【讨论】:

    • 打高尔夫球:awk -F[ '{$0=$NF+0}1'
    • 真的!还有awk -F[ '{print $NF+0}'
    猜你喜欢
    • 2018-06-29
    • 2021-10-26
    • 2015-06-14
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多