web-dev-qa-db-ja.com

時間範囲間でログをフィルタリングする方法

これが私のログ形式です(デモのために簡略化されています)

2018-04-12 14:43:00.000 ERROR hello
2018-04-12 14:44:01.000 ERROR world
2018-04-12 14:44:03.000 INFO this is a multi-line log
NOTICE THIS LINE, this line is also part of the log
2018-04-12 14:46:00.000 INFO foo

では、[2018-04-12 14:44:00.000, 2018-04-12 14:45:00.000)のログをフィルタリングして次の出力を生成する方法は?

2018-04-12 14:44:01.000 ERROR world
2018-04-12 14:44:03.000 INFO this is a multi-line log
NOTICE THIS LINE, this line is also part of the log
1
aLeX

sedでこれを行うことができます

sed -n '/2018-04-12 14:44:00.000/,/2018-04-12 14:45:00.000/p' log_file

これは最初のインスタンスとのみ一致することに注意してください。日付を区切り文字として使用して、その間に出力します。

awkでも同様のことができます。

awk '/^2018-04-12 14:44:00.000.*/,/2018-04-12 14:45:00.000.*/' log_file
0
alpha