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

时间:2017-12-21 08:11:24

标签: bash shell unix awk grep

我想要获取结果,让我们从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等。

2 个答案:

答案 0 :(得分:0)

我想获取结果,比如说从2017-12-19 19:14到整天……日期将来自一个变量……

这不是正则表达式的工作。由于时间戳具有合理的形式,因此我们可以简单地将其作为一个整体进行比较。 g。:

start='2017-12-19 19:14'
end='2017-12-20'
awk -vstart="$start" -vend=$end 'start <= $0 && $0 < end' ErrorLog_1.txt

答案 1 :(得分:-1)

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