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


1

我有一个电子邮件日志文件,记录电子邮件何时发出,以及谁。这被记录下来,所以有一个拉链和解压缩的日志文件混合使用一周左右。

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

sudo find /var/log/exim4/ -type f -exec zgrep -i "foobar@gmail.com" "{}" \\; | sort

这让我收回发送给的所有电子邮件foobar@gmail.com。到现在为止还挺好。

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

2015-04-20 18:01:05 H=(fake.org) [180.108.175.57] F=<fake@fake.org> rejected RCPT <webmaster@charanga.com>: relay not permitted
2015-04-20 18:01:05 H=(fake.org) [180.108.175.57] F=<fake@fake.org> rejected RCPT <webmaster@charanga.com>: relay not permitted
2015-04-20 18:06:33 H=(bar.net) [111.176.77.1] F=<foo@bar.net> rejected RCPT <service@charanga.com>: relay not permitted

所以,假设我想要在“2015-04-20 18:03:00”之后发送所有电子邮件。它应该只是让所有行都“大于”我的时间戳。我如何修改我的命令?谢谢,马克斯

Answers:


2

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

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

它将输出:

2015-04-20 18:06:33 H=(bar.net) [111.176.77.1] F=<foo@bar.net> rejected RCPT <service@charanga.com>: relay not permitted
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.