次のような日付/時刻形式で始まる行エントリを持つログファイルを処理します。
20150408 13:29:28 <rest of text>
grep
の日付範囲にするために何をする必要がありますか?
20150408 13:29:28
で始まり20150408 17:55:02
で終わるすべての行が好きですか?
grep
は仕事のためのツールでしょうか、それともsed
のような他のものが良いでしょうか?
Certanlyタスクはsed
で実行できます
sed '/20150408 13:29:28/,/20150408 17:55:02/! d' log_files
ただし、行に正確な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
awk
が役立つと思います:
awk 'BEGIN { sd = "20150408T13:29:28"; ed = "20150408T17:55:02"; } $1 "T" $2 >= sd && $1 "T" $2 <= ed' log