这是我的日志文件的内容:
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 中编写正则表达式以提取这部分信息。
感谢您的任何帮助。
$ awk '{ sub(/^sid:(<<")?/,"",$5); sub(/">>$/, "", $5); print $5}' log.txt
I374uribbbbb151101030212130
A28udestaniephillips52x151031185754827
在这里,我们只是使用 sub
来删除(通过用空字符串替换)第 5 个字段中我们不想要的部分。
第一个sub
删除前导sid:
,可以选择后跟<<"
。
第二个sub
删除尾随">>
。请注意,如果没有尾随">>
,则sub
什么都不做,是无害的。
$ awk '{gsub(/sid:(<<")?|">>/,"",$5); print $5}' file
I374uribbbbb151101030212130
A28udestaniephillips52x151031185754827