2013-02-08 49 views
0

我有以下字符串:提取字符串在bash中的另一個字符串?

[1360308597] SERVICE NOTIFICATION:qreda;演示jms2; OutConnectorResponse;通知服務逐電子郵件; CRITICAL ConsumerCount = 0 [1360308817] SERVICE NOTIFICATION:qreda;人口統計學jms2;磁盤空間; CRITICAL;通知服務逐電子郵件; DISK CRITICAL - 自由空間:/數據3018 MB(10%的inode = 92%):

在上述字符串我要提取的字符串以下demo-jms2。這裏demo-jms2發生兩次。我想要得到demo-jms2之後的所有單詞,所以答案應該是 OutConnectorResponse和​​。

回答

3

你想要的是positive look-behind

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

選項:

-P,--perl-正規表達式模式是一個Perl的正則表達式

-o,--only-匹配只顯示一行匹配部分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 
+0

須藤嗨,我怎樣才能從這個grep的刪除重複?如果磁盤空間來了2倍... – RP89

+1

@ RP89請參閱編輯,請注意。 –

+0

Thnx Sudo ...這解決了我的問題 – RP89

相關問題