记录一下查看指定时间段内容的命令:
1. 使用grep:
1.1 -- 查询2020-11-07 15:00-16:59内容(在原来的内容test.log中进行追加,nohup.out为项目启动之后默认生成的文件,可以理解成是项目启动输出到控制台的内容输出到此文件中)
grep '2020-11-07 1[5-6]' nohup.out >> /temproject/logs/test.log
1.2-- 查询16:00:00-16:19:59内容并输出到指定文件test.log中(在原来的内容test.log中进行覆盖)
grep '2020-11-07 16:[0-1]' nohup.out > /temproject/logs/test.log
测试发现grep命令只支持类似于16:00-16:10或是16:12-16:14这种类型;如果想查询15:59-16:14这种类型,使用grep只能按照16:00-16:19:59查询;现实场景中日志作为问题定位的依据,最好能实现指定时间查询;此时就可以使用sed命令;
2. 使用sed命令:
2.1 查询2020-11-07中15:59-16:14:59时间段内的内容并输出到test.log中
sed -n '/2020-11-07 15:59:[0-9][0-9]/,/2020-11-07 16:14:[0-9][0-9]/p' nohup.out >/temproject/logs/test.log
使用说明:对于这种跨时间段的使用sed命令有时会发现查询出来的内容是空,首先检查一下命令格式是否正确,其次要查询一下这个时间段内的数据确实存在.说一下自己遇见的场景:
自己想查询15:58-16:14时间段内容的内容,使用的命令:
sed -n '/2020-11-07 15:58:[0-9][0-9]/,/2020-11-07 16:14:[0-9][0-9]/p' nohup.out >/temproject/logs/test.log,但是查询的内容为空,实际nohup.out 中日志内容是从15:59开始进行记录,查询时间从15:59以后就能查寻到.多次测试发现使用sed命令开始查询时间只能从有日志记录时间往后开始查询(如果从有日志记录时间之前开始查询则为空),查询的结束时间没有要求.
注意:sed命令中-n 与p联用会打印/符合正则/中的内容,//中表示的是正则内容.
3.关于查看指定时间段内的所有完整日志信息说明
如果使用上面的grep命令查询会发现只能查询出指定时间段内的单行数据,
这明显与现实场景不符合,所以需要对上面的命令进行改造.我想到的办法是将查询出的时间行数以后尽可能多的行数查询出来,改造后的命令:
grep -A1000 '2020-12-01 12:0[0-1]' nohup.out > /temproject/logs/testGrep.log
-A1000表示是符合时间范围的两个时间段之间的1000行数据.显示多少行可自行设置;
使用改造后的命令查询出来的内容:
如果使用上面的sed命令会查询出符合时间段内的所有内容.
4.查询指定日期中的所有内容
查询12-09这天的所有内容,多次测试发现最优指令:
sed -n '/2020-12-09 00:00:00/,/2020-12-09 23:59:59/p' nohup.out >/temproject_https/logs/test.log
或是
grep -A10 '2023-06-28' nohup.out > /kawa_two_program/1417.txt
5.查询指定日期内含有某些关键词的日志信息
grep -A10 '2023-06-28' nohup.out | grep -A10 '人脸认证失败' > /kawa_two_program/1417.txt
注意:
grep 时间段 文件| grep 关键词 文件 > 指定文件 这种输出内容为含有关键字或是指定时间段内的所有内容
想查看指定时间段内的指定关键字,最后一个查询不需要添加文件:
grep 时间段 文件| grep 关键词 > 指定文件