時間範囲をgrepするUnixコマンド


1

特定の日付で保存されたログファイルがあります。特定の日時にログエントリを別のファイルに取得したいのですが。

例:からのすべてのエントリ 2014-12-04 00:00:00から2014-12-04 17:00:00までの時間

回答:


2

egrepを試してください:

pttrn="2014-12-04 0[0-9]"
pttrn="${pttrn}|2014-12-04 1[0-6]"
pttrn="${pttrn}|2014-12-04 17:00:00"

egrep "${pttrn}" <logfile>

egrepパターンには3つの部分があります。最初の部分では、00:00:00から09:59:59までのすべてが取り込まれます。 2番目の部分は10:00:00から16:59:59までのすべてを取得し、3番目の部分は17:00:00を取得します。


初の egrep で始まる値を消去します 08 または 09 (つまり、 08:00 そして 09:59 そして、2番目のものは可能にします 17:1017:2017:30、など...、通過する。
G-Man

@ G - Manありがとうございます。あなたが正しい。私は今それを直したと思います。
Daniel Goldfarb

うまくいくはずです。それはに簡素化することができます egrep "2014-12-04 (0[0-9]|1[0-6]|17:00:00)"
G-Man

0

4分間隔のログが必要な場合は、

grep "01/APR/2014:16:3[5-9]" logfile

2014年4月1日の16時35分から16時39分までのすべてのログ行を返します。

2014年9月17日から開始して過去5日間が必要だとします。

grep "1[3-7]/Sep/2011" logfile

これが役立つことを願っています、


0

開始行と終了行を選択することができます。 sed

sed -n '/Dec  5 11:00/,/Dec  5 12:00/p' /var/log/daemon.log

これにより、最初の行からすべての行が印刷されます。 Dec 5 11:00 最初の行まで(および含む) Dec 5 12:00。これは、ログが時系列であると仮定している(すなわち、すべての行が時間順になっている)。の -n 各行を印刷するというデフォルトの動作を抑制します。


しかし、これは Dec 5 11:00 そして Dec 5 12:00そうじゃない?もし Dec 5 10:59 すぐに続く Dec 5 11:01それから sed どこから始めればいいのかわからない。そしてあれば Dec 5 11:00、 しかしその後 Dec 5 11:59 続いて Dec 5 12:01sed どこで止まるのかわからない。
G-Man

1
そうだね。あなたは省略することができます :00 一部ですが、その場合も1時間に少なくとも1行のログが必要です。個人的には、スクリプトをデータに合わせて調整します。多分perl fooを適用するかもしれません。
wurtel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.