我有以下字符串:
[1360308597]服务通知:qreda; demo-jms2; OutConnectorResponse; notify-service-by-email; CRITICAL ConsumerCount = 0 [1360308817]服务通知:qreda; demo-jms2;磁盘空间; CRITICAL;通知服务 - 电子邮件; DISK CRITICAL - 免费空间:/ data 3018 MB(10%inode = 92%):
在上面的字符串中,我想提取demo-jms2
之后的字符串。这里demo-jms2
出现两次。我希望得到demo-jms2
之后的所有单词,所以答案应该是
OutConnectorResponse
和Disk Space
。
答案 0 :(得分:3)
你想要的是positive look-behind:
$ 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