正则表达式只使用awk打印匹配的字符串而不是整行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式只使用awk打印匹配的字符串而不是整行相关的知识,希望对你有一定的参考价值。

我试图从下面的数据只匹配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:

感谢致敬,

答案

解决方案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

解决方案第二:如果您的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

以上是关于正则表达式只使用awk打印匹配的字符串而不是整行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 awk 打印匹配的正则表达式模式?

Linux基本命令之正则表达式取ip地址

如何使用 awk 命令在匹配正则表达式之前和之后打印 5 行

awk 在匹配模式之前打印整行

grep

使用awk / grep / sed / bash / vim进行正则表达式匹配和打印