• ベストアンサー

grepについて

grepについて教えてください。 ログファイルから 09/16~09/21の日付を抜くには どのようにしたらよろしいのでしょうか? egrep "(09/16|09/17|09/18|09/19|09/20|09/21)" ログファイル名 しか思いつきません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.3

こんばんは。 超簡単なスクリプトを書いてみました。 正規表現で頭をひねるのも結構ですが、ログの管理や解析を任せられているのなら スクリプトくらい書けるようになったほうがいいと思います。 $ cat lognuki.pl #!/usr/bin/perl $start = $ARGV[0]; # 開始日 $end  = $ARGV[1]; # 終了日 open(IN, $ARGV[2]) or die; # ログファイルオープン while( $line = <IN>) {   chomp($line);   if ( $start le $line && $line le $end ) {     print $line, "\n";   } } close(IN); $ ./lognuki.pl 09/18 09/23 log.txt 09/18 09/19 09/20 09/21 09/22 09/23

その他の回答 (5)

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.6

#4です。 >もう少し柔軟な考え方をしましょうね。w #3さん、もし気分を害されたらすいません。 「ログレコードのどこに日付があるかわからないとスクリプトは書けません」 に対しての想定問答 「でも、#3さんは書いてくれたじゃないですか」 の回答として書いたつもりだったのですが、脳内完結ですね。言葉が足りませんでした。

回答No.5

>これは「日付だけからなるログレコード」というちょっと考えられない形式用です。 #3さんが、「超簡単なスクリプトを書いてみました。」 といっているのだから、スクリプトの作り方の見本でしょう。 もう少し柔軟な考え方をしましょうね。w

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.4

grep系コマンドを使うなら、お書きの方法がベストです。ただし、括弧は不要ですが。 #1の方のお書きのほうが短いですが、範囲を変えるとき大変。 普通はawkでしょうね。もちろん、PerlでもCでもいいですが。ただし、ログレコードのどこ(何文字目とか、区切り文字で区切られた何フィールド目とか)に日付があるかわからないと書けません。 #3さんがPerlスクリプトをお書きですが、これは「日付だけからなるログレコード」というちょっと考えられない形式用です。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

grepを使わないといけない理由があるのでしょうか? これはgrep一発では無理だと思います。egrepを使うか、sedとかperlを使えば出来ますが。

  • Lean
  • ベストアンサー率72% (435/603)
回答No.1

egrep "09/(1[6-9]|2[01])" ログファイル名 とか。

関連するQ&A

  • grepでの抽出について

    solarisでgrepを使ってログの抽出を行っているのですが、 123のある行を抽出したいとき、grep 123 ファイル名とすると 1234のある行も一緒に抽出されると思います。 これを123のみ抽出させる方法を教えてください。

  • 正規表現で15日以前のlogをgrep -vしたい(シェルはbash)

    通信機器が吐き出すlogファイルを不要な日付をgrep -vして チェックしたいと思っております。 grep対象logファイルには「Jul 29 22:20:28」この形式で日付が 各行ごとに含まれて降ります。 grep -vしたい日付は、1日~15日までの日付となるのですが、 自分なりに調べ、以下のように実行しました。 ■最初に実行したgrep -v grep -v "Jul\ \ [0-9]" hoge.log | grep -v "Jul\ [0-1][0-5]" > [logfile] 次に興味本位で以下のように実行したところ、 ■2回目に実行したgrep -v grep -v "Jul\ [0-9]" hoge.log | grep -v "Jul\ [0-9][0-5]" > [logfile2] 私としては、2回目に実行したgrep -vでは20日~29日までと 30日~31日までの日付は除去されると想定していたのですが、 実行したところ、20日~29日までと30日~31日までの日付が しっかりと含まれておりました。 これが何故なのかまったく検討がつかないため、 こちらに質問させていただきました。 どなたかおわかりになるかたおられましたら、 アドバイス・ご教授よろしくお願いします。

  • grepについて

    Freebsdにおいてgrepというコマンドがあると思いますが、このgrepで特定の階層にある特定のファイルを探すことはできるのでしょうか? あるファイルの中に存在する、特定の文字などを検索するやり方は分かるのですがファイル名を検索しようとしても、やり方が分からずできません。 それとも、もともとgrepコマンドは、あるファイル内に存在する文字を検索するためのコマンドなのでしょうか?? その辺りも、よく分かりません。 他に、grepはこういう時に便利!!みたいな例があれば教えてくださいませ。 ご回答の程、よろしくお願い致します。

  • grepで日付指定してlogを取り出したい

    あるアカウントの maillog を、日付指定して取り出したいんだけど、 以下に何を付け足したりすればいいかわかりません。 そもそも(パイプで?)付け足せば済むことなのかもわかりませんし。。。 grep imap /var/log/maillog | grep アカウント 日付の正しい記述も判らないです。 正しいコマンドや便利な抽出方法があれば教えていただけますでしょうか。

  • 秀丸のgrep検索

    お世話になっております。 「秀丸」のことです。 秀丸のなかにテキストデータが今入っています。 1 日付 時間 データ 2 日付 時間 データ 3 日付 時間 データ というかんじにはいっています。 同じファイルがたくさんあって、ひとつのフォルダに なっています。 そのデータにgrep検索をかけたいのです。 以前検索をかけたときは、 普通に 検索元ファイル名 日付 時間 データ 検索元ファイル名 日付 時間 データ 検索元ファイル名 日付 時間 データ 検索元ファイル名 日付 時間 データ というふうに結果が出たのですが、 ルートディレクトリ?からファイル名が出てきてしまうのです。 具体的には C:¥ABC¥DCV¥UUU\検索元ファイル名 日付 時間 データ というように余計なデータまでくっついてくるのです どうしたらいいでしょうか? なにがわるいのでしょう? ちなみに、 そのデータはネットワークにありましたが、 自分のPC(ローカルに落としてきても) おなじでした どうしたらいいでしょうか?

  • grepでの日本語検索

    現在、 grep '2004-10-1' test.log | grep -c '日本語' というように日付と単語の両方がある行数を取り出す処理を行っています。 grepでは日本語は対応していないとありましたが、このように日本語でも行数を取得できるようなコマンドがありましたら、ご教授ください。

  • grepの方法について

    下記のようにgrep結果を取り出したいのですが大量にあります。 検索結果を最新の1つのみ取り出したいのですが、何か良い方法はありますでしょうか? # cat abc.log |grep testword 大量です # cat abc.log |grep -c testword 9100

  • grepで半角空白または行末が続く語を探したい

    grepもしくはegrepで、半角空白または行末が後ろに続くabcという語を探すにはどう表現すればよいでしょうか? 例えば、 $ echo 'abc' | grep 'abc[ $]' では$が行末ではなく$という文字そのものになります。 2014年8月3日

  • solarisのgrep-これでいいんでしょうか

    はじめまして、yulaliといいます。 solaris(sunOS6?)でログファイル内の特定文字をgrepで引っかけたいのですが 現在実際にさわれる環境にないため確認させて頂きます。 「strA」「strB」「strC」のいずれかを含む行を抜き出す場合は cat target.log | /usr/xpg4/bin/grep -e strA -e strB -e strC で良いんですか? あと、-c や -F の使い方(結果)もlinuxと同じと考えて良いんでしょうか 初歩的な質問ですいませんが、自信がないのでどうかよろしくお願いします。

  • vimのgrepの使い方がよくわかりません

    WindowsXPでvimを使い始めたのですが、 grepのやり方がよくわかりません。 一応、unixでgrepやviは最低限レベルでは使えます。 やりたいこととしては、 指定のテキストから、特定の文字列を検索して、 結果を一覧で表示させて、 その中からどれか選んで、その行へジャンプして表示する ということがやりたいです。 で、たぶんgrepでやれるんじゃないかと思って質問しています。 grepに関する簡単な解説を読むと、 (esc)したあと、 :grep hoge hoge.txt でできる、というようなことが書いてあるのですが、 上記で実行すると、 :!findstr /n hoge hoge.txt > c:xxxxxxxx 2>&1 (1 of 1): 1:hoge と出ますが、ここから何をしていいかわかりません。 grepの機能としてはここで終わりなのでしょうか? ここから結果の行へジャンプしたりできないのでしょうか? また、grep対象のファイルって毎回自分で入力するのでしょうか? たとえば、現在編集しているファイルを対象としたい場合、 現在のファイル名となる変数みたいものはあるのでしょうか?