【问题标题】:regex to print only matched string not the whole line using awk正则表达式使用 awk 仅打印匹配的字符串而不是整行
【发布时间】:2018-08-11 15:25:21
【问题描述】:

我试图从下面的数据中仅匹配 ID“549d40r0-1e1b-01v8-0d72-0a8f2c680100”,我使用正则表达式进行模式匹配,但是只需要匹配 ID 而不是整行都有模式匹配。你能帮我使用AWK吗?

这是正则表达式: ([a-z0-9]-[a-z0-9]-[a-z0-9]-[a-z0-9]-[a- z0-9]*):

[SyncThread:server:_88285] ERROR SyncThread.logDeliveryFailure(1535) - 
Delivery for server threw runtime exception. Failed to send data: 549d40r0-
1e1b-01v8-0d72-0a8f2c680100: java.net.ConnectException: Connection refused: 
connect -- Connection refused:

感谢和问候,

【问题讨论】:

  • ID值是否占多行?

标签: awk


【解决方案1】:

解决方案 1: 如果您的 id(您在帖子中发布的字符串)位于单行上,并且您只想查找特定字符串,然后跟随可以帮助你。

awk -v var="549d40r0-1e1b-01v8-0d72-0a8f2c680100" '{if(match($0,var)){print substr($0,RSTART,RLENTH)}}'  Input_file

awk -v var="549d40r0-1e1b-01v8-0d72-0a8f2c680100" 'match($0,var){print substr($0,RSTART,RLENTH)}'   Input_file

解决方案 2: 如果您的 id(您在帖子中发布的字符串)位于一行中,并且您希望将其与正则表达式匹配(根据仅显示示例)然后以下内容可能对您有所帮助。

awk '{if(match($0,/[0-9a-z]+\-[0-9a-z]+\-[0-9a-z]+\-[0-9a-z]+\-[0-9a-z]+:/)){print substr($0,RSTART,RLENTH)}}'   Input_file

awk 'match($0,/[0-9a-z]+\-[0-9a-z]+\-[0-9a-z]+\-[0-9a-z]+\-[0-9a-z]+:/){print substr($0,RSTART,RLENGTH)}'  Input_file

【讨论】:

  • 我尝试的第二个解决方案匹配整行具有给定 ID。输入文件有很多我提到的 ID 文件应该匹配。
  • @user3834663,如果您只想打印匹配的 id,请检查我编辑的解决方案,然后让我知道结果如何。
猜你喜欢
  • 2021-10-09
  • 2020-06-17
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 2011-07-29
相关资源
最近更新 更多