grepと全文検索

  • 投稿日:
  • by
  • カテゴリ:



巷で「グレップ」といえば、ただの全文部分一致検索のことを指すようです。




秀丸はだめだC-gでグレップ出来ないから


いや、キーアサインを変更すればいい


サクラは最初からC-gなのになぁ


昔はネ、VZとかMifesよく使ったよ。



なんて会話は「よく耳にする会話パターン」ですね。



grepはパターン指定に正規表現を使わないと何とももったいないですね。


メタキャラクタの使い方はそこら中に書いてあるので、ここでは私が良く使うものを。



例:"(enter|leave)"


⇒"enter"または"leave"が含まれる行を検索することが出来ます。



これはログの検索などで必須のパターンですね。例えばタイムスタンプつきのログから処理の所要時間を集計する場合などでは、開始時のログ1、終了時のログ2についてgrepで(ログ1|ログ2)と書いてprintすれば、瞬殺です。目でひとつずつ追いかけるなんて!


もちろん3つ以上でも指定できますし、.*などを併用すればもっと簡単。[0-9]使えばサフィックスありの多数のログのバリエーションも検索できます。




さて、Unix/Linuxのタンマツでは、



% find . -name "*[ch]" | xargs grep "(enter|leave)" /dev/null



な感じ。egrepだったり、-Eが必要だったりするのは、環境依存なので、お好きなように。


私のお気に入りは行番号と、前後3行を表示するコレ。



% grep -n -3



emacsならM-xでfind-grepだかgrep-findで似たようなコマンドが出ます。結果からバッファを開けるのでチョー楽ですよ。



UNIXならxargsで負荷を相当下げられます。grepライブラリ作者の人は、高速化に命を削っておられるわけですが、ただの全文部分一致検索でしか使われないなんて本当にもったいないことです。



参考リンク:


UNIXの部屋 コマンド検索: xargs


http://x68000.q-e-d.net/~68user/unix/pickup?keyword=xargs&target=command



読んだことないけど、紹介



詳説 正規表現 第3版

詳説 正規表現 第3版