プログラミングをしている時など、多数のファイルから正規表現にマッチするファイルを検索したくなることがあります。そんな時に役立つ Ruby スクリプトを作ったので公開します。
鬼雲の強力な正規表現を利用でき、見つかった箇所が色付きでコンソールに表示されます。
ダウンロード
※Ruby 2.0 で動作確認済みです。
特徴
- Ruby の正規表現を利用できます。
- 検索対象は複数指定でき、指定には Dir.glob のワイルドカードも利用できます。
(シェルによってワイルドカードが展開されてしまう場合は、シングルクォートで括って指定します。) - 正規表現とのマッチング対象をファイル名、ファイルの内容、ファイルの各行の3つから選択できます。
- 行検索時は、見つかった行の前後の行を表示することもできます。
- 行検索時は each_line で一行ずつ読み込むので、巨大なファイルも少ないメモリで処理できます。
- NKF で文字コードを自動判定し、UTF-8 に変換してから処理しているので、複数の文字コードが混在している環境でも利用できます。
- バイナリファイルは高速にスキップします。
- 見つかった箇所はカラーで強調された状態でコンソールに表示されます。
カラー表示をOFFにすることもできます。 - 正規表現をファイルから入力することができます。
- 検索対象とするファイルのサイズの上限と下限を指定できます。
- Ruby が動く環境であればどこでも利用できます。
- ただし、Ruby 2.0 の機能を使っているので、Ruby 2.0 以上が必須です。
使い方
次のような引数を指定して実行します。
> search.rb 検索する正規表現 [検索対象ファイル . . .]
「検索する正規表現」は Ruby の正規表現リテラルで指定します。
※スクリプト内で eval で評価しています。
「検索対象ファイル」には Dir.glob と同じワイルドカードを利用できます。
※-h オプションを指定して実行するとヘルプが表示されます。
例えば、大文字小文字を区別せずに「Ruby」という文字列を検索する場合は次のように実行します。
> search.rb /ruby/i
見つかったファイルが列挙されます。 正規表現にマッチした行を列挙したい場合には、-l オプションを指定して実行します。
> search.rb /ruby/i -l
カレントディレクトリ直下の .txt ファイルのみを検索対象としたい場合は次の様に検索対象ファイルを指定します。
> search.rb /ruby/i ./*.txt
変更履歴
Ver 3.7
- Grep 形式のフォーマットを修正
Ver 3.6
- Grep 形式で結果を表示するオプションを追加
- 行検索モード時に、ヒットさせる行を最大文字数で制限する機能を追加
- 見つかったファイルの名前と行の内容以外は stderr に出力するよう変更
Ver 3.5
- --colors オプションのデフォルト値を $stdout.isatty に変更
Ver 3.4
- -l オプションの -l 4, の様な記述を -l 4,0 と解釈
Ver 3.3
- -l オプションの -l ,3 の様な記述を -l 0,3 と解釈
Ver 3.2
- -l オプションに 0 を指定できるよう修正
Ver 3.1
- 行検索モードの高速化
Ver 3.0
- 行検索時に、見つかった行の前後の行を表示する機能を追加
- 行検索時は each_line で一行ずつ読み込むように変更
- バイナリファイルを高速にスキップする機能を追加
[amazon asin="4873113598" /]