从日志中提取值

时间:2014-11-12 10:18:22

标签: unix awk scripting grep cut

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

[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,但没有成功

1 个答案:

答案 0 :(得分:0)

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