Unix 命令来 grep 时间范围

Unix 命令来 grep 时间范围

我有一个日志文件,保存了特定的日期。我想将特定时间和日期范围内的日志条目提取到另一个文件中。

例如:从 2014-12-04 00:00:00 到 2014-12-04 17:00:00 的所有条目

答案1

尝试 egrep:

pttrn="2014-12-04 0[0-9]"
pttrn="${pttrn}|2014-12-04 1[0-6]"
pttrn="${pttrn}|2014-12-04 17:00:00"

egrep "${pttrn}" <logfile>

egrep 模式包含三个部分。第一部分抓取从 00:00:00 到 09:59:59 的所有内容。第二部分抓取从 10:00:00 到 16:59:59 的所有内容,第三部分抓取 17:00:00 的所有内容。

答案2

如果你想要 4 分钟间隔的日志,

grep "01/APR/2014:16:3[5-9]" logfile

将返回 2014 年 4 月 1 日 16:35 至 16:39 之间的所有日志行。

假设您需要从 2014 年 9 月 17 日开始的过去 5 天的数据,您可以使用以下命令:

grep "1[3-7]/Sep/2011" logfile

希望这能有所帮助,

答案3

您可以选择起始行和结束行,例如sed

sed -n '/Dec  5 11:00/,/Dec  5 12:00/p' /var/log/daemon.log

这将打印从第一行Dec 5 11:00到(包括)第一行 的所有行Dec 5 12:00。这假设日志是按时间顺序排列的(即所有行都按时间顺序排列)。 是-n为了抑制打印每一行的默认操作。

答案4

假设您位于existingfile.log存在的目录中。

$ egrep "(2014-12-04 00:*|2014-12-04 17:00:00)" existingfile.log >> /home/newfile.txt

相关内容