在某个时间段之间进行 Grep

Grep between some period

我有一个很大的日志文件,其中每条记录都以日期开头,格式如下:

[2014-10-06 07:03:49]

按特定时间段进行 grep 的最简单方法是什么?

我想按特定日期范围进行 grep,例如,以示例日期,从 06.10.2014 到 08.10.2014。

如果您的格式类似于 [YYYY-MM-DD HH:MM:SS],您必须创建某种正则表达式来涵盖您愿意的日期 grep

例如,如果您只想在年份为 2014 年和 10 月时过滤 6 到 8 天,您可以说:

grep '^\[2014-10-0[6-8]' file

这表示:获取所有以 [2014-10-0 开头,后跟 6、7 或 8 的行。

测试

$ cat a
[2014-10-06 07:03:49] line1
[2014-10-06 07:14:49] line2
[2014-10-06 07:03:49] line3
[2014-10-07 07:03:49] line4
[2014-10-08 07:09:49] line5
[2014-10-09 07:03:49] line6
[2015-01-11 07:03:49] line7
$ grep '^\[2014-10-0[6-8]' a
[2014-10-06 07:03:49] line1
[2014-10-06 07:14:49] line2
[2014-10-06 07:03:49] line3
[2014-10-07 07:03:49] line4
[2014-10-08 07:09:49] line5

我不会使用 grep,我会使用 awk

awk -v from="[2014-10-20 00:00:00]" -v to="[2015-01-02 23:59:59]" '
    {datetime =  " " }
    from <= datetime && datetime <= to
' file

祝贺您使用了一种合理、可排序的日期时间格式。