上一篇 下一篇 分享链接 返回 返回顶部

如何根据日期范围过滤日志文件条目?

发布人:Minchunlin 发布时间:2021-02-01 10:32 阅读量:1837

如果你在Linux服务器系统中读取日志文件时遇到了问题,那么本文就对了,简单的用cat来读取日志文件,是一种挺基本的检查日志文件的方式,但当你想根据时间来有条理的过滤数据时,我们就会使用awk、grep和sed命令。

awk是一个流行的命令行工具,用来操作文件中的数据,并根据Linux服务器系统中给定的模式生成报告。而grep是一个简单的模式工具,它使用正则表达式搜索模式。

今天,我们将使用awk和grep命令行工具,根据日期范围过滤/var/log/syslog文件。

使用awk命令过滤数据

首先,我们使用awk命令根据时间范围对Syslog文件进行过滤,如下所示。

$ sudo awk -v start=07:00 -v stop=19:00 'start <= $2 && $2 < stop' /var/log/syslog

将start=HH:MM替换为起始小时和分钟,stop=HH:MM替换为最终小时和分钟。

如果你想更容易和简单地检查日志,那么你可以按照grep命令实用程序。

使用grep命令过滤数据

我举几个用grep的例子,比如我想检查Today的日志,那么我就通过下面的命令。

$ sudo grep -E " Dec 11" /var/log/syslog

下面我们来说说,这个命令 "grep "是如何工作的。grep是用来搜索所提供的文件中的常规模式。

参数-E被称为扩展-gex,用于设置模式,最后,你需要提供一个日志文件或日志目录。

要获取从12月1日到12月10日的日期范围内的数据,请使用下面的命令。

$ sudo grep -E "Dec 1|Dec 10" syslog

使用 Sed 命令过滤数据

现在我们将向您展示如何使用 sed 命令行过滤数据。要在一定时间范围内获取数据,例如从12月11日18:45:06到12月11日19:00:01,使用下面的命令。

$ sudo sed -n '/Dec 11 18:45:06 /,/Dec 11 19:00:01/p' /var/log/syslog

sed的-n参数将不会打印每一行的输出。现在/pattern1/,/pattern2/将是表达式。在最后的-p参数中建议sed根据给定的模式验证下一个表达式。在所有这些之后,你需要提供日志文件或日志文件的位置。

目录结构
全文