如何在指定的时间范围内打印从日志文件中提取的行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在指定的时间范围内打印从日志文件中提取的行?相关的知识,希望对你有一定的参考价值。

我想从2017-12-19 19:14获取结果,直到整天从一个看起来像这样的日志文件 -

/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:00.723 Info: Saving /var/opt/MarkLogic/Forests/Meters/00001829
/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:01.134 Info: Saved 9 MB at 22 MB/sec to /var/opt/MarkLogic/Forests/Meters/00001829
/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:01.376 Info: Merging 19 MB from /var/opt/MarkLogic/Forests/Meters/0000182a and /var/opt/MarkLogic/Forests/Meters/00001829 to /var/opt/MarkLogic/Forests/Meters/0000182c, timestamp=15137318408510140
/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:02.585 Info: Merged 18 MB in 1 sec at 15 MB/sec to /var/opt/MarkLogic/Forests/Meters/0000182c
/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:05.200 Info: Deleted 15 MB at 337 MB/sec /var/opt/MarkLogic/Forests/Meters/0000182a
/var/opt/MarkLogic/Logs/ErrorLog_1.txt:2017-12-19 19:14:05.202 Info: Deleted 9 MB at 4274 MB/sec /var/opt/MarkLogic/Forests/Meters/00001829  

我是Unix的新手,熟悉grep命令。我尝试了下面的命令

date="2017-12-19 [19-23]:[14-59]"
echo "$date"
grep "$date" $root_path_values

但它会抛出无效的范围结束错误。有解决方案吗日期将来自一个变量,因此它将是不可预测的。因此,不要只是记住这个例子。 $ root_path_values是一系列错误文件,如errorLog.txt,errorLog_1.txt,errorLog_2.txt等。

答案

egrep '2017-12-19 (19|2[0-3]):(1[4-9]|[2-5][0-9]):*.*' path/to/your/file试试这个正则表达式。

如果您需要变量模式:

#!/bin/bash
date="2017-12-19 (19|2[0-3]):(1[4-9]|[2-5][0-9]):*.*"
egrep ${date} path/to/your/file

以上是关于如何在指定的时间范围内打印从日志文件中提取的行?的主要内容,如果未能解决你的问题,请参考以下文章

利用shell编程,提取注释文件中指定范围内的行

如何在 Python 中打印特定月份范围内的事务日志

python中如何从字符串内提取指定的字符

用于提取指定单词之间的行的批处理脚本

提取bam/sam文件指定区域reads

如何从 .wav 文件中提取特定频率范围?