0

我怎么能用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”的数据,它是“SOFT”之后的一个参数。在这里我的问题是当我用 2 grep 时我得到了两条线,因为 2 包含在第二行的时间戳中。

4

5 回答 5

2

已经有很多答案建议修复您的grep表情。如果您以交互方式处理问题,那么这可能是正确的做法,并且立即缩小结果范围的快速破解对您来说就足够了。

如果您正在编写脚本,我会推荐类似以下awk命令的内容:

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

或者@sudo_O 在评论中提供的更具可读性的等效项:

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

首先,我们必须从您的示例中重建您想要的规范。您处于可靠执行此操作的最佳位置,但看起来您希望2在分号分隔字段的第五个字段中找到。这就是上面命令的作用。

于 2013-02-14T10:40:38.477 回答
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;...
于 2013-02-14T10:37:02.927 回答
0

更多上下文的 Grep:

 grep "SOFT;2;" data

注意引号,否则“;” 将由 shell 解释。

于 2013-02-14T10:36:23.677 回答
0

尝试这样做:

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

我为单一性添加了更多模式。

于 2013-02-14T10:36:34.207 回答
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
于 2013-02-14T10:47:47.807 回答