HNXgrepの紹介
HNXgrepは、ファイル内テキストの検索ツール(いわゆるGrepツール+α)です。
シンプルな画面でありながら高機能、ストレスなく日常的に使い込むことができる操作性・検索能力・機能を備えたツールとなることをめざし開発しています。
製作者自身がGrep検索をよく使う身であり、ツールそのものの使い勝手をよくすることに力を入れています。
また、検索結果をテキストエディタ・Excel等で加工・集計しやすいよう配慮しています。
■高速検索
検索スピードを向上させるための工夫を行っています。
(1)事前に検索対象ファイルをキャッシュ (Ver1.2以降)
検索対象フォルダ/ファイルを指定した時点で、検索対象ファイルのリストやファイル内容そのものを、OSのHDDキャッシュに読み込むよう試みます。
検索実行時にファイルアクセス(HDDからの読み込み待ち)が発生せず、テキスト内容の検索Grep処理のみに専念できるため、「検索実行」ボタンを押してから検索完了するまでの所要時間が大幅に短縮します。
※ただし、ローカルHDD以外(ネットワークドライブ・リムーバブルメディア)についてはキャッシュは効きません。また対象ファイルの量が一定以上だったり、PC上の空きメモリが十分ではない場合も、キャッシュは行いません。
(2)巨大ファイルは読み込みスキップ
巨大ファイルの読み込み・検索は大変時間がかかり、またたいていの場合検索対象としたくない過去のアーカイブやログファイルであることが多いため、一定サイズ(初期値20MB)以上の巨大なファイルはそもそも処理対象外と割り切るようにしています。
(3)非テキストファイルは読み飛ばし検索スキップ
検索ファイルが、非テキストファイル(画像ファイルやexeファイルなど)と判明した時点で、そのファイルの内容読み込みを中止し、検索Grepもスキップします。
画像ファイルが混在しているWebサイトのソース/開発中のプログラムソースなどのディレクトリを検索する際も、非テキストファイルの検索で無駄に時間を取られることはありません。
(4)画面表示/検索を別スレッド(マルチスレッド)で実行 (Ver1.2以降)
検索処理は、画面UIスレッドとは独立したスレッドで実行され、検索のみに専念します。
画面操作を行っているあいだ検索が止まるようなことはありません。
(また、検索中も通常通り画面操作が行えます)
これらの設定も、設定オプション画面でカスタマイズできます。
■Unicode(UTF)完全対応
プログラム内部もUnicodeで動作しており、Shift_JISにマッピングされていない文字を含むキーワードも、問題なく入力・検索・結果表示できます。
たとえば、Unicodeにしか定義されていないEN-DASH「–」、EM-DASH「‒」などの半角ハイフンと同じように見えてしまう文字や、ShiftJISに該当文字のない単位記号「㎢」、逆さハテナ「¿」・ユーロ「€」といった特殊記号、外国語文字「Āā」「Ա」「ᄛ」など、ちょっと古めのGrepツールやテキストエディタでは入力(表示)すらままならないような文字についても、正しく取り扱うことができます。
※サロゲートペア文字に関しては、検索条件・結果表示に使用するフォントとしてメイリオなどの対応フォントを指定することで、正しく表示できるようになります。
■ファイル種類/文字コード自動判別
バイナリファイルの読み飛ばしを行うため、文字コード/ファイル種類の判別を独自処理により実施しています。
テキストファイルの文字コード(ASCII/SJIS/EUC-JP/JIS/BOMなしUTF-8、BOMありUTF-8/UTF-16/UTF-32、およびANSI)だけでなく、非テキストファイルの種類についても主要なものは自動判別します。
2013年4月時点のバージョン(Ver1.3.1)では、以下のファイルを判別できます。
なお、検索対象とするファイルの種類を「バイナリ含む」とした場合は、画像ファイル以外の非テキストファイルも検索対象とし、バイナリファイル内に埋め込まれている文字列を探索することができます。
■検索結果を「ファイル一覧/合致箇所」2タブで確認可能
検索条件にマッチした箇所は「合致箇所」タブで確認できます。
さらに、検索対象ファイルの一覧を表示する「ファイル一覧」タブがあり、こちらのタブで
- 自動判別したファイル種類/文字コード
- マッチした箇所数(またはマッチした行数)
- マッチ箇所無しなら「0」とゼロ表示
- 検索対象外ファイルならブランク
- ファイルサイズ、総行数・ファイルの改行コード
などの情報も確認できます。
「総行数xx行のうちマッチした行数はどれ位だったのか」「マッチしなかったファイルはどれか(また、実はバイナリファイルなので検索対象外となったのか、それとも総行数xx行を調べて本当に見つからなかったのか)」といった、一般的なGrepツールでは確認できない情報についても、一覧表示で把握することができます。
検索結果をエクスプローラのように並べ替えすることもできます(Ver1.2以降。Ver1.3.2以降は列並べ替えも可)。
■検索ファイルのプレビュー表示・外部ビューア連携
検索したファイルは、検索画面内でプレビュー表示できます。
テキストファイルは(巨大なファイルでなければ)全行表示、非テキストファイルはマッチ箇所のみ抜粋表示、画像ファイルの場合はその画像を表示します。
マッチ箇所は赤字で強調表示、合致箇所一覧で選択中の行は下線表示(Ver1.2以降)となります。
また、一覧をダブルクリックしたりすることで、選択したファイルを外部アプリケーションで表示できます。
設定可能な外部アプリケーションは、
- テキストエディタ
※最大3種類。画面下部のメニューなどで切り替え、使い分け可能(Ver1.3以降) - バイナリエディタ(バイナリファイルを表示する場合などに使用)
- 画像ビューア/エディタ(画像ファイルを表示する際に使用)
- ZIPアーカイバ(ZIP形式ファイルを表示する際に使用)
です。
それ以外にも、Windowsの「送る」メニューに登録されたアプリケーションでファイルを開くことも出来ます。(Ver1.2以降)
検索結果の一覧表示を右クリックし、「選択ファイルをさらにGrep」を選ぶことで、
選択したファイルのみを検索対象として新しい検索ウィンドウを開くことも出来ます。
■検索結果のテキスト形式コピー・ファイル出力 (Ver1.2機能強化)
「合致箇所」タブ、「検索結果一覧」タブに一覧表示されている検索結果は、以下の形式でクリップボードにコピーでき、そのままテキストファイルなどへ貼り付けできます。
- ファイル名のみ/ファイルフルパス、またはファイル自体
- UnixGrep形式(ファイル名:行番号:行テキスト)
- TSVタブ区切り形式(Excelにそのまま貼り付け可能)
Excelなどで検索結果を加工・集計する際に便利です。
また、検索結果をまるごとファイルに出力することもできます。
■xdoc2txtと連携し、Excel/Word/PDFなどのファイル内のテキストも検索可能(Ver1.2機能強化)
Excel/Word/PDFファイルなどからテキスト抽出するコンバータxdoc2txt(hishida様作)を導入することで、これらのファイル内のテキスト内容も検索することができます。
- xdoc2txtをダウンロード(Ver2.x(Unicode版)を推奨)
- ダウンロードしたxdoc2txtのzipファイルを解凍し、(commandディレクトリに入っている)「xdoc2txt.exe」を、HNXgrep.exeと同じディレクトリにコピー
で、検索対象とするファイルの種類として「Office等含む」が選択できるようになり、「Office等含む」を指定して検索するとExcel/Word/PDFファイル内のテキスト内容も(オートシェイプ内のテキストも含めて)検索できます。
xdoc2txtのバージョンが2.xであれば、Officeファイル内もUnicodeで検索します。旧バージョンVer1.xxのxdoc2txtではShift_JISで表現できない文字は検索できません。
「Office等含む」でテキスト検索対象とするファイルの種類(拡張子)は、設定ウィンドウで変更できます。また、xdoc2txtのiFilter検索機能を利用するよう設定することもできます。 (Ver1.3以降。xdoc2txtのVer2.x使用時のみ)
■検索対象パスの複数指定、探索条件指定
単一フォルダ/単一ファイルだけを対象とした検索だけでなく、
複数のフォルダ・ファイルをまとめて対象にして検索も出来ます。
また、検索条件入力欄の2行目にて、ファイルマスク・フィルタ・サブフォルダ探索階層数も指定できます。
詳細は、読みづらいですが検索対象フォルダ・ファイル指定に関する説明(テキストファイル)をご覧ください。
■検索キーワードのワイルドカード/あいまい検索/正規表現指定
- 検索キーワードに「?」「*」を用いたワイルドカード検索
- 検索キーワードに「&」を用いたAND条件指定、
- 検索キーワードに「|」を用いたOR条件指定
- 英大文字/小文字を区別しない検索
- 全角文字/半角文字を区別しない検索(Ver1.2以降)
- 正規表現による検索
- 正規表現とワイルドカード指定を併用した検索
の指定を、それぞれ個別に切り替えできます。
正規表現エンジンには.NET Frameworkの正規表現ライブラリを使用しています。
正規表現キーワード指定文字列は入力しながら構文エラー有無を確認できます(Ver1.2以降。エラーありならキーワードが赤字表示となります)。
■行検索/ファイル全体(行またぎ)検索の切り替えが可能
検索モード指定に応じ、検索方法が変わります。
以下の検索モードが用意されています。
行内検索
行単位での検索を行います。改行をまたがってマッチする文字列は抽出対象外となります。
同一行内のマッチ箇所をすべてリストアップすることも、
(「合致行数」を把握するため)同一行内のマッチ箇所はうち1箇所目のみを検出することも、可能です。
複数行検索
複数行にまたがる文字列も条件指定・検索可能です。
(ワイルドカードに改行もマッチさせるか否かも、指定できます)
複数行検索キーワード指定ウィンドウ(Ver1.2以降)にて、改行・TABを含む検索キーワードを入力することもできます。
■その他
検索プロジェクト管理機能(検索条件/履歴をプロジェクト単位で別管理) (Ver1.3以降)
概要は、プロジェクト機能検討の記事をご覧ください。
(検討時のメモ書きで手抜きしてます。すみません。)