awk命令匹配多个模式

时间:2016-11-06 00:09:41

标签: bash awk

我使用awk命令在两次不同的时间内查找日志文件中的条目。 我使用过这个命令,它可以工作:

awk '$0 >= "Oct 04 12:00:00" && $0 <= "Oct 04 12:30:00"' /var/log/messages

我想知道如何搜索在此期间允许或阻止的特定端口。例如:如果我在12点到12点30分之间搜索阻塞的端口22,我该如何使用此awk命令进行搜索?

/var/log/messages档案的内容:

Nov 5 8:44:30 System1 Kernel [022525 252748] OUTPUT DROPPED=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:01:00:25:97:b2:47:01:00 SRC=10.0.0.1 DST=192.168.4.141 LEN=221 TOS=0x00 PREC=0x00 TTL=128 ID=23315 PROTO=UDP SPT=183 DPT=183 LEN=209

日志文件中的条目与上面的内容类似。我想知道如何匹配信息,比方说,12:00到12:30,其中SPT = 80,DPT = 80

1 个答案:

答案 0 :(得分:0)

您可以使用&&添加更多条件,就像使用日期一样。您可以在两个正斜杠之间放置一个正则表达式,以匹配整行/记录。

awk '/port 22 (blocked|allowed)/ && $0 >= "Oct 04 12:00:00" && $0 <= "Oct 04 12:30:00"' /var/log/messages

当然,如果您需要更复杂的规则,也可以使用括号和逻辑和(&&)和/或或(||)的组合。

  

我想知道如何匹配信息,比方说,12:00到12:30,其中SPT = 80,DPT = 80

按照上述说明,只需添加/SPT=80/ && /DPT=80/ && ...条件即可。请注意,您显示的示例行不匹配,因为它的SPT和DPT值不是80而是143。

顺便说一下,请记住,按日期过滤的方式(例如$0 >= "Oct 04 12:00:00" && $0 <= "Oct 04 12:30:00")可能不适用于跨越月边界的日期,例如Nov中的下限,Dec中的上限{1}}无效。