use*_*029 5 linux grep logs sed
我们使用的日志文件的行条目以日期/时间格式开头,例如:
20150408 13:29:28 <rest of text>
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能grep获得日期范围?
比如说所有20150408 13:29:28以20150408 17:55:02?开始和结束的行?
将grep是适合工作的工具或将别的更好样sed?
当然任务可以通过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)