将以前的模式与 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 中编写正则表达式以提取这部分信息。

感谢您的任何帮助。

$ 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

最新更新