- ベストアンサー
grepについて
grepについて教えてください。 ログファイルから 09/16~09/21の日付を抜くには どのようにしたらよろしいのでしょうか? egrep "(09/16|09/17|09/18|09/19|09/20|09/21)" ログファイル名 しか思いつきません。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 超簡単なスクリプトを書いてみました。 正規表現で頭をひねるのも結構ですが、ログの管理や解析を任せられているのなら スクリプトくらい書けるようになったほうがいいと思います。 $ 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/10359)
#4です。 >もう少し柔軟な考え方をしましょうね。w #3さん、もし気分を害されたらすいません。 「ログレコードのどこに日付があるかわからないとスクリプトは書けません」 に対しての想定問答 「でも、#3さんは書いてくれたじゃないですか」 の回答として書いたつもりだったのですが、脳内完結ですね。言葉が足りませんでした。
- FoggyMountain
- ベストアンサー率21% (79/372)
>これは「日付だけからなるログレコード」というちょっと考えられない形式用です。 #3さんが、「超簡単なスクリプトを書いてみました。」 といっているのだから、スクリプトの作り方の見本でしょう。 もう少し柔軟な考え方をしましょうね。w
- notnot
- ベストアンサー率47% (4900/10359)
grep系コマンドを使うなら、お書きの方法がベストです。ただし、括弧は不要ですが。 #1の方のお書きのほうが短いですが、範囲を変えるとき大変。 普通はawkでしょうね。もちろん、PerlでもCでもいいですが。ただし、ログレコードのどこ(何文字目とか、区切り文字で区切られた何フィールド目とか)に日付があるかわからないと書けません。 #3さんがPerlスクリプトをお書きですが、これは「日付だけからなるログレコード」というちょっと考えられない形式用です。
- a-saitoh
- ベストアンサー率30% (524/1722)
grepを使わないといけない理由があるのでしょうか? これはgrep一発では無理だと思います。egrepを使うか、sedとかperlを使えば出来ますが。
- Lean
- ベストアンサー率72% (435/603)
egrep "09/(1[6-9]|2[01])" ログファイル名 とか。