002. all_grep.rb

公開先:https://github.com/mwnock/hdl_tools

概要:

  • grepの基本動作と同等の動作をするツールです。
  • zshを使わなくても、ディレクトリを掘り下げて検索しにいきます。
  • コマンドラインモードにより、Rubyの正規表現(たぶんPerlと同じ感じ)を使ったキーワード検索ができます。
    • grepも、helpをみると様々な正規表現の指定(Perlタイプも可)可能なんですね。知りませんでした。
  • バイナリファイルは自動的に除外するチェッカを組み込んでいます。

動作確認:

  • ruby 1.9.3p448

制限事項:

  • 本家grepみたいな多様な制御オプションはありません。
  • テキストファイルの中に特殊文字が含まれていると、RubyがErrorを出すため、それを回避するかわりにその行は処理しません。

説明:

  1. 1行目のrubyパスを直してください。
  2. debug変数を1にすると、上記制限事項にある「回避した行」の情報を表示します。

使い方:

  1. 通常モード
    1. 引数が3つあります。
      1. keyword:検索したい文字列を指定してください
      2. directory:検索したいディレクトリを指定してください(省略可能)
      3. extension:検索したい拡張子を指定してください(省略可能)
    2. 例:
      1. ./all_grep.rb ^module
        1. → 先頭から module と書いてあるファイルと行番号を、カレントディレクトリからサブディレクトリまで網羅検索します。
      2. ./all_grep.rb always ./rtl
        1. → alwaysを含むファイルと行番号を、./rtl ディレクトリ以下すべてから探し出します。
      3. ./all_grep.rb "initial begin" ./tb sv
        1. → "initial begin"を含む、拡張子が.svのファイルと行番号を、./tb ディレクトリ以下すべてから探し出します。
  2. コマンドラインモード
    1. 第一引数を -c にします。第二引数、第三引数は「通常モード」と同じです。
    2. 例:
      1. ./all_grep.rb -c ./rtl
        1. *I Entering command line mode.
        2. Search key = ?
      2. と表示されるので、キーワードを指定します。細かい正規表現が指定できます。
      3. *I Entering command line mode.
      4. Search key = ? ^class.*type
      5. → 先頭がclassで、同じ行に type が含まれる行を取得