如何grep日志中的特定时间段

use*_*029 5 linux grep logs sed

我们使用的日志文件的行条目以日期/时间格式开头,例如:

20150408 13:29:28 <rest of text>
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能grep获得日期范围?

比如说所有20150408 13:29:2820150408 17:55:02?开始和结束的行?

grep是适合工作的工具或将别的更好样sed

Cos*_*tas 4

当然任务可以通过sed

sed '/20150408 13:29:28/,/20150408 17:55:02/! d' log_files
Run Code Online (Sandbox Code Playgroud)

但如果行没有精确的20150408 13:29:28脚本将不打印任何内容,如果它没有精确的20150408 17:55:02文件将打印每一行直到最后。所以更好的是通过脚本使用日期比较:

limit1=$(date -d "20150408 13:29:28" +"%s")
limit2=$(date -d "20150408 17:55:02" +"%s")
while read -r logdate logtime logline
do
    logsec=$(date -d "$logdate $logtime" +"%s")
    if [ $limit1 -le $logsec -a $limit2 -ge $logsec ]
    then
        echo $logdate $logtime $logline
    fi
done < log_files
Run Code Online (Sandbox Code Playgroud)