【问题标题】:regular expression that use th previous pattern with awk将前一个模式与 awk 一起使用的正则表达式
【发布时间】:2016-02-11 11:24:01
【问题描述】:

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

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 '/(?&lt;=sid)^[A-Z]+\/{print $8 }',但这是错误的,我不知道如何解决。

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

感谢您的帮助。

【问题讨论】:

  • 有什么理由不使用awk { print $5 }
  • @Tom Fenech 嘿,你的意思是 8 美元吗?我需要根据 sid 进行排序。
  • 从您的示例来看,您感兴趣的部分似乎是第五个字段。
  • 是的,你说得对,我没有复制完整的例子。;)

标签: regex linux awk


【解决方案1】:
$ awk '{ sub(/^sid:(<<")?/,"",$5); sub(/">>$/, "", $5); print $5}' log.txt
I374uribbbbb151101030212130
A28udestaniephillips52x151031185754827

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

第一个sub 删除前导sid:,后面可以选择&lt;&lt;"

第二个sub 删除了尾随"&gt;&gt;。请注意,如果没有尾随的"&gt;&gt;,那么sub 什么都不做并且是无害的。

【讨论】:

  • 谢谢你的回答,可以在你的回答中稍微解释一下你做了什么吗?
  • 当然,见编辑。如果还有什么不清楚的,请告诉我。
【解决方案2】:
$ awk '{gsub(/sid:(<<")?|">>/,"",$5); print $5}' file
I374uribbbbb151101030212130
A28udestaniephillips52x151031185754827

【讨论】:

  • 谢谢@Ed Morton,我看到您的解决方案也有效。如果您能对您的解决方案及其对上一个解决方案的优先级给出一些解释,我将不胜感激。
  • 恕我直言,这已经非常清楚了,但是认为它有什么作用,我会告诉你你是对还是错?
猜你喜欢
  • 2015-12-18
  • 2016-12-29
  • 2011-06-19
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
相关资源
最近更新 更多