• ベストアンサー

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% (4900/10358)
回答No.6

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

回答No.5

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

  • notnot
  • ベストアンサー率47% (4900/10358)
回答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