想要在以下日志中最后一次出现 [] 之间提取数据。
[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
尝试awk
,cut
和sed
,但没有成功
答案 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