2013-02-14 34 views
0

我怎麼能grep號碼。我有以下數據Grep,號碼爲

[240465] SERVICE ALERT: localhost;demo-jms2:Critical Services;CRITICAL;SOFT;2;Disk Space,OutConnectorResponse-MCASMS,OutConnectorResponse-SPONSORED-SMS, 
[240465] SERVICE EVENT HANDLER: localhost;demo-jms2:Critical Services;CRITICAL;SOFT;1;notify-service-by-email 

我想grep用數字「2」這個數據是經過「軟」的參數。在這裏我的問題是我收到兩條線,當我和2用grep自2第二行的時間戳包含..

+2

'grep的「軟; 2''? – 2013-02-14 10:36:31

回答

0

grep的更多背景:

grep "SOFT;2;" data 

心靈的報價,否則「; 「將由shell解釋。

0

嘗試這樣做:

grep 'SERVICE.*ALERT.*SOFT;2' file 

我已經增加了更多的模式的單一性。

1

使用時只需將模式;2;

$ grep ';2;' file 
[240465] SERVICE ALERT: localhost;demo-jms2:Critical Services;CRITICAL;SOFT;2;... 

或者,如果你只是想匹配2以下SOFT然後用;SOFT;2;

$ grep ';SOFT;2;' file 
[240465] SERVICE ALERT: localhost;demo-jms2:Critical Services;CRITICAL;SOFT;2;... 
2

已經有一堆的答案,建議修復您grep表達。如果你以交互方式處理問題,這可能是正確的做法,並且現在可以縮小結果的快速入侵對於你來說已經足夠了。

如果你正在寫一個劇本,我會推薦這樣的事情awk命令:

awk -F';' '{if ($5==2) print}' 

或者更可讀的等價物通過@sudo_O在評論規定:

awk -F';' '$5==2' 

首先,我們必須重新構建您的示例所需的規範。你處於最可靠的位置,但它看起來像就像你想在分號分隔字段的第五個字段中找到2。這就是上述命令的作用。

+3

或者用awk -F';' '$ 5 == 2'作爲默認塊是'print' – 2013-02-14 10:43:07

0
grep -Po "(?<=SOFT;)\d+" 

與您的數據

kent$ echo "[240465] SERVICE ALERT: localhost;demo-jms2:Critical 
Services;CRITICAL;SOFT;2;Disk Space,OutConnectorResponse-MCASMS,OutConnectorResponse-SPONSORED-SMS, 
[240465] SERVICE EVENT HANDLER: localhost;demo-jms2:Critical Services;CRITICAL;SOFT;1;notify-service-by-email"|grep -Po "(?<=SOFT;)\d+" 
2 
1