grep/awk/sed查指定时间段日志

情景重现:管理后台down了,项目的日志为4G多的一个文件,查询上午某段时间内的日志

示例的日志格式:2020-07-09 10:15:46.635 [...-thread-3] ERROR com....

①grep

命令:grep '时间' '日志文件名'

1、示例:如查询2020-07-09 10:10到2020-07-09 10:15区间的日志

grep "2020-07-09 10:1[0-5]" catalina.out

2、示例:如查询当天10点到11点的日志

grep "2020-07-09 1[0-1]" catalina.out

注:亲测有效

grep查询目录下所有文件具体内容(grepawksed查指定时间段日志)(1)

图1

②awk命令

1、示例:如查询今天10:10:10 到10:15:59区间的日志,注意时间要用引号

awk '$2>"10:10:10" && $2<"10:15:59"' catalina.out

注意参数$1和$2的取值,我这里$1是指年月日,$2是指时分秒。

扩展:$0表示行所有信息,$1、$2、$3...$n分别表示第1列、第2列、第3列...第n列(以空格为默认分隔符将每行切片)。awk命令经常会使用这些符号去做匹配、打印指定指定列等操作

日志格式为:2020/07/09-05:02:37 >> INFO >>

则:awk '$1>"2020/07/09-05:01:38" && $1<"2020/07/09-05:02:38"' catalina.out

注:亲测有效

grep查询目录下所有文件具体内容(grepawksed查指定时间段日志)(2)

图2

③sed命令

1、示例:如查询2020-07-09 10:10到2020-07-09 10:15区间的日志

sed -n '/2020-07-09 10:10:00/,/2020-07-09 10:15:00/p' catalina.out

注:由于我项目日志格式:2020/07/09-11:50:59 ERROR https-jsse-nio-8080-exec-2 对于该命令没有适用

查询结果生成日志文件:linux中>表示覆盖原文件内容(文件的日期也会自动更新),>>表示追加内容(会另起一行,文件的日期也会自动更新)。

可以将查询截取的日志生成一个新的日志文件来方便查询,实例:grep "2020-07-09 1[0-1] " catalina.out >> queryTemporaryLog20200709.log

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充!

,