2

次のコマンドを使用して、過去 10 日間のログ ファイルを検索できます。

find . -type f -mtime -10 |xargs grep -i -n 'exception' 2> /dev/null

しかし、午前 6 時から午後 6時までの間にログに記録されたファイル内の行の検索をさらに制限したいと考えています。行が次のようになっている場合、grepコマンドを変更してこれらをフィルタリングする方法を知りたいです:

2012-09-04 03:50:41,658 [MainLogger: ] EXCEPTION  AppLog - some exception 1
2012-09-04 10:01:32,902 [MainLogger: ] EXCEPTION  AppLog - some exception 2
2012-09-04 15:39:51,901 [MainLogger: ] EXCEPTION  AppLog - some exception 3
2012-09-04 18:12:51,901 [MainLogger: ] EXCEPTION  AppLog - some exception 4

上記の場合、2 行目と 3 行目は午前 6 時から午後 6 時の間なので返されます。

任意の助けをいただければ幸いです

4

3 に答える 3

2

それを行うための1つの簡単で醜い方法は、次のように多くのgrepを追加することです:

find . -type f -mtime -10 |xargs grep -i -n 'exception' | grep -v " 00" | grep -v " 01" | ... | grep -v " 18" | grep -v " 19" ... 2> /dev/null

またはより簡潔に:

find . -type f -mtime -10 |xargs grep -i -n 'exception' | grep -v -e " \(0[012345]\|18\|19\|2[0123]\)" 2> /dev/null
于 2012-09-04T16:23:05.983 に答える
1

次のようにハックできます。

grep ' 0[6789]:\| 1[01234567]\| 18:00:00,000'

しかし、処理にもう少し時間が必要な場合は、より強力な言語 (Perl やDateTimeなど) に切り替えることをお勧めします。

于 2012-09-04T16:22:37.907 に答える
0

適切な日時ライブラリを備えた言語では、すべての日付を正規表現に変換することで問題は簡単になります。デフォルトの正規化は、1970 年 1 月 1 日午前 0 時からの秒数に変換することです。次に、入力行の正規数が開始時刻よりも大きく、終了時刻よりも小さいかどうかを確認します。

于 2012-09-04T17:55:28.943 に答える