这是我的日志文件的内容:
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中编写正则表达式,以便只提取这部分信息。
感谢您的帮助。
答案 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