2013-02-14 101 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