0

我有以下字符串:

[1360308597] 服务通知:qreda;demo-jms2;OutConnectorResponse;notify-service-by-email;CRITICAL ConsumerCount=0[1360308817] 服务通知:qreda;demo-jms2;Disk Space;CRITICAL;notify-service-by-email ;DISK CRITICAL - 可用空间:/data 3018 MB (10% inode=92%):

在上面的字符串中,我想提取下面的字符串demo-jms2。这里demo-jms2出现两次。我想得到所有单词demo-jms2,所以答案应该是 OutConnectorResponseand Disk Space

4

1 回答 1

3

你想要的是 积极的后视

$ grep -Po '(?<=demo-jms2;)[^;]+' file
OutConnectorResponse
Disk Space

选项:

-P, --perl-regexp PATTERN 是 Perl 正则表达式

-o, --only-matching 仅显示与 PATTERN 匹配的行的一部分

解释:

(?<=demo-jms2;) # Positive lookbehind: match the follow after literal demo-jms2;
[^;]+           # Match one or more non ; characters 

编辑:

要通过以下方式从结果管道中过滤重复项sort -u

$ grep -Po '(?<=demo-jms2;)[^;]+' file 
OutConnectorResponse
Disk Space
OutConnectorResponse
Disk Space

$ grep -Po '(?<=demo-jms2;)[^;]+' file | sort -u
Disk Space
OutConnectorResponse
于 2013-02-08T09:33:46.543 回答