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で 2 回発生します。次のすべての単語を取得したいdemo-jms2ので、答えは and にする必要が OutConnectorResponseあり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 に答える