使用awk

时间:2016-02-11 11:24:01

标签: regex linux awk

这是我的日志文件的内容:

INFO consume_end_processor: user:bbbb callee_num:+23455539764806 sid:I374uribbbbb151101030212130 duration:0 result:ok provider:sipouthh.ym.ms
INFO consume_processor: user:bbbb callee_num:+23455539764806 sid:<<"A28udestaniephillips52x151031185754827">> duration:0 result:ok provider:sipouthh.ym.ms

我需要从以下内容中提取内容:

sid:<<"A28udestaniephillips52x151031185754827">>
sid:A28udestaniephillips52x151031185754827

喜欢A28udestaniephillips52x151031185754827

我的回答是awk '/(?<=sid)^[A-Z]+\/{print $8 }',但这是错误的,我不知道如何解决。

如何在awk中编写正则表达式,以便只提取这部分信息。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

$ awk '{ sub(/^sid:(<<")?/,"",$5); sub(/">>$/, "", $5); print $5}' log.txt
I374uribbbbb151101030212130
A28udestaniephillips52x151031185754827

这里我们只是使用sub删除(通过替换为空字符串)我们不想要的第5个字段的部分。

第一个sub删除了前导sid:,可以选择后跟<<"

第二个sub删除尾随">>。请注意,如果没有尾随">>,则sub不执行任何操作并且无害。

答案 1 :(得分:2)

$ awk '{gsub(/sid:(<<")?|">>/,"",$5); print $5}' file
I374uribbbbb151101030212130
A28udestaniephillips52x151031185754827