使用字符串比较的 Grep:仅返回“高于”时间戳的行

使用字符串比较的 Grep:仅返回“高于”时间戳的行

我有一个电子邮件日志文件,记录了电子邮件的发送时间和收件人。这个日志文件会被轮换,因此会存在大约一周前的压缩和解压日志文件。

我目前(成功)取回了与特定电子邮件匹配的所有行

sudo find /var/log/exim4/ -type f -exec zgrep -i "[email protected]" "{}" \\; | sort

这会让我返回发送至 的所有电子邮件[email protected]。到目前为止一切顺利。

我现在想做的是全部无论收件人是谁,在特定时间之后发送的电子邮件。这应该很简单(我认为),因为所有日志文件行都以时间戳开头 - 它们具有以下格式:

2015-04-20 18:01:05 H=(fake.org) [180.108.175.57] F=<[email protected]> rejected RCPT <[email protected]>: relay not permitted
2015-04-20 18:01:05 H=(fake.org) [180.108.175.57] F=<[email protected]> rejected RCPT <[email protected]>: relay not permitted
2015-04-20 18:06:33 H=(bar.net) [111.176.77.1] F=<[email protected]> rejected RCPT <[email protected]>: relay not permitted

因此,假设我想要在“2015-04-20 18:03:00”之后发送的所有电子邮件。这应该只是获取“大于”我的时间戳的所有行的情况。我如何修改我的命令来实现这一点?谢谢,Max

答案1

由于日期的格式是按时间顺序与词汇顺序相同的,因此您可以简单地awk这样使用:

yourcommand | awk '$0 >= "2015-04-20 18:03:00"'

它将输出:

2015-04-20 18:06:33 H=(bar.net) [111.176.77.1] F=<[email protected]> rejected RCPT <[email protected]>: relay not permitted

相关内容