コマンドライン用テキスト検索・置換ツール mfind バージョン 1.7 (2010 年 3 月 8 日) ■ 概要 「mfind」は、コマンドライン用のテキスト検索・置換ツールです。 Windows のコマンドプロンプトには find コマンドと findstr コマンドが備 わっていますが、文字コードが Shift_JIS のファイルしか検索できず、また findstr コマンドで使える正規表現はごく基本的なものだけです。 mfind は多くの文字コードに対応し、Perl 5 のような高度な正規表現をサ ポートします。 バージョン 1.0 では、置換機能を加えました。検索して見つかった文字列を 別の文字列に置き換えて上書き保存することができます。 注意: 本ソフトウェアは正規表現やコマンドプロンプトの使い方などについ て一通りの知識・経験がある方を対象としています。 ■ 動作環境 Microsoft .NET Framework 2.0 あるいはこれと互換性のある実行環境が必須 です。.NET Framework 2.0 は Windows Update から入手可能です。 http://windowsupdate.microsoft.com/ Windows Update からダウンロードできない場合は、代わりに下記ページから 「.NET Framework 2.0 再頒布可能パッケージ」をダウンロード・インストー ルしてください。 http://www.microsoft.com/japan/msdn/netframework/downloads/ ※ .NET Framework 2.0 は Windows 95/NT 4 以前のコンピュータにはインス トールできません。 ■ インストール mfind.exe をお好きなディレクトリに配置するだけです。 配置したディレクトリにパスを通しておく (あるいは、パスの通ったディレク トリに配置する) とよいでしょう。 ■ アンインストール 設定の保存などは一切行っておりませんので、mfind.exe を削除するだけです。 ■ 使用条件 本ソフトウェアはフリーウェアです。 どなたでも無償でお使いいただけますが、本ソフトウェアに関して何らかの不 具合が生じても作者は一切責任を取りませんので、予めご了承の上お使い下さ い。特に、置換機能を使用する際は誤って必要な文字列を消してしまわないよ うに十分ご注意下さい。 また本ソフトウェアの再配布は自由です。 ■ 使用方法 mfind.exe をコマンドプロンプトから起動します。 mfind [オプション...] [検索する文字列...] [--] [検索するファイル...] 実行すると、検索する文字列を指定したファイルから検索し、その文字列を含 む行を全て列挙します。結果は標準出力に出力します。 検索するファイルを一つも指定しなかった場合は、標準入力からデータを取り 込んで、その中を検索します。ファイル名として "/" または "-" を指定した ときも標準入力から取り込んで検索します。 ● オプションの指定 ○ /? オプション 簡単な使い方の説明を標準出力に出力します。 このオプションを使うと、他のオプションなどは一切無視します。 検索・置換は行いません。 ○ /M オプション /M を指定しない場合、行単位で検索を行います。検索文字列が見つか った行の内容をそれぞれ出力します。複数の行にまたがる文字列を検索 することはできません。 /M を指定すると、ファイル全体に対して検索を行います。検索文字列 が見つかるとファイル名のみを出力します。複数の行にまたがる文字列 を検索することができます。/M を指定した場合、正規表現「.」は改行 文字を含む任意の文字にヒットし、「^」「$」はそれぞれ行頭・行末に ヒットします。 ○ /N オプション 検索文字列が見つかったときに、検索文字列が見つかった行の内容とそ のファイル名の他にその行番号も表示します。 ○ /S オプション 現在のディレクトリだけではなくて、そのサブディレクトリのファイル も検索・置換します。 ○ /V オプション /V を指定しない場合、検索文字列が見つかった行を出力します。 /V を指定すると、動作内容を反転して、検索文字列が見つからなかっ た行を出力します。 このオプションは、置換操作やその結果の保存には影響しません。 ○ /Q オプション /Q を指定しない場合、文字列の置換を行うときに置換前と置換後の内 容の対照表示をします。 /Q を指定すると、対照表示をしません。 /Q と /C は同時には使えません。 ○ /C オプション 文字列の置換をする前に、置換前後の内容を対照して、置換を実際に行 うかどうかを一つづつ確認します。「置換しますか」と表示されたら "Y" (はい) か "N" (いいえ) を入力してください。(このとき代わりに "Q" または Esc キーを入力すると強制終了できます) /C を指定したときは /Q は指定できません。 ○ /W オプション 置換結果を元のファイルに上書き保存します。 このオプションを指定しないと、置換を行ってもその結果は保存されま せん。(ただ置換処理の様子がコンソールに出力されるだけです。) 逆にこのオプションを指定すると、実際に置換を行わなくても検索に ヒットしただけでそのファイルを上書き保存します。 なお、置換結果を (上書き保存ではなく) 元のファイルとは別のファイ ルに保存することはできません。 ○ /B オプション 置換結果を元のファイルに上書きする前に、バックアップファイルを作 成するようにします。バックアップファイル名は、元のファイル名に ".old" を付けたものになります。(例: "abc.txt"→"abc.txt.old") バックアップファイルが既に存在する場合、バックアップファイルは上 書きされます。(バックアップのバックアップは作成しません) ○ /E{8,8N,B,BN,L,LN,S,E,J,D}, /E:XXX オプション /E で始まるオプションは、検索するファイル (または標準入力) を読 み込む際のエンコーディング (文字コード) を指定します。 指定がない場合は、/ED を指定したものと見做します。 /E8 UTF-8 (BOM あり) /E8N UTF-8 (BOM なし) /EB UTF-16 ビッグエンディアン (BOM あり) /EBN UTF-16 ビッグエンディアン (BOM なし) /EL UTF-16 リトルエンディアン (BOM あり) /ELN UTF-16 リトルエンディアン (BOM なし) /ES Shift_JIS /EE EUC-JP /EJ iso-2022-jp /ED システムのデフォルト /E:XXX エンコーディングを直接指定 (例: "/E:Shift_JIS") ○ /O{8,8N,B,BN,L,LN,S,E,J,D}, /O:XXX オプション /O で始まるオプションは、検索結果を標準出力に出力する際のエン コーディングを指定します。エンコーディングの指定方法は上記の /E で始まるオプションと同様です。 指定がない場合はシステムのデフォルトエンコーディングを使用します。 ○ /W{8,8N,B,BN,L,LN,S,E,J,D}, /W:XXX オプション /W で始まるオプションは、置換結果をファイルに上書き保存する際の エンコーディングを指定します。エンコーディングの指定方法は上記の /E で始まるオプションと同様です。 指定がない場合はファイルを読み込んだときと同じエンコーディングを 使用します。 なお、このオプションは /W オプションを兼ねているので、このオプ ションを指定したときは別途 /W オプションを指定する必要はありませ ん。 ○ /P オプション 検索する文字列を標準入力から取り込みます。 ○ /P:XXX オプション 検索する文字列を指定したファイルから取り込みます。XXX の部分には ファイル名を指定してください。(例: "/P:patterns.txt") オプションは /B のように大文字でも /b のように小文字でも構いません。 オプションは全て検索する文字列の前に指定してください。 /B や /M などの一文字のオプションは、/BMS のように一つにまとめて指定 できます。ただし、/WMS のように W を最初に指定することはできません。 (/WB オプションとの混同を避けるため) また、先頭の / の代わりに - を使うこともできます。 ● 検索する文字列の指定 検索する文字列は / で区切って次のように指定します ○ 検索のみ行う場合 /検索文字列/オプション ○ 検索と置換を行う場合 /検索文字列/置換文字列/オプション 検索文字列は、(l オプションを指定しない限り) 正規表現として解釈され ます。同じく、置換文字列は正規表現に当てはまった文字列を置換するため のパターンとして解釈されます。 例: 「ABC」を検索する場合 "/ABC/" 例: 「around」又は「round」を大文字・小文字を区別せずに検索する場合 "/a?round/i" 例: 大文字の「A」を小文字の「a」に置換する場合 "/A/a/" 例: 全てのローマ字の前後に < > を追加する場合 "/[A-Z]/<$0>/gi" 例: 「/$/」を「$」に置換する場合 "/\/\$\//$$/" 例: 「
」を改行に置換する場合 "/
/\r\n/" 正規表現は、.NET Framework の正規表現検索機能で使える機能がそのまま 使えます。正規表現の構文などについてはここをご覧下さい↓ http://msdn.microsoft.com/ja-jp/library/az24scfc.aspx l オプションを指定しない場合、置換文字列の中では「\」はエスケープ文 字として働きます。例えば、「\t」はタブを、「\x20」は空白を表します。 置換文字列の中では、「\7」や「\40」は常に前方参照ではなく八進数エス ケープと解釈します。 検索する文字列をコマンドライン引数として指定する場合は、原則として全 体を引用符 " で囲んでください。文字列に空白や記号が含まれる場合は、 引用符は必須です。文字列に引用符そのものを含めるには、「\"」と書きま す。文字列に「/」そのものを含めるには、l オプションを指定しないで 「\/」と書きます。 (Windows 標準のコマンドライン以外のシェルでは記号の扱いが異なる可能 性があります。お使いのシェルのマニュアルをお読み下さい) ● /P, /P:XXX オプション /P オプションを指定すると、標準入力から検索する文字列を読み込みます。 検索する文字列を一行ごとに一つづつ指定してください。(このとき、全体 を引用符「"」で囲まないで下さい) 空行が現れるか標準入力の末尾に到達 すると読み込みを終了して検索を開始します。 /P:XXX オプションを指定すると、指定したファイルから検索する文字列を 読み込みます。標準入力の場合と同様に検索する文字列を一行ごとに一つづ つ指定してください。ただし、空行は単に無視します (入力の終わりとは見 なしません)。 標準入力またはファイルから検索する文字列を読み込む場合は、「/」の代 わりに、「\」以外の任意の記号を区切りとして使用できます。(l オプショ ンを指定する場合は「\」も区切りとして使えます) 従って、例えば /
/
/g は @
@
@g と書き直すことができます。更にこの場合は「/」をエスケープする必要が なくなるので、 @
@
@g と書き直すことができます。 ● 検索する文字列に対するオプション ○ i オプション このオプションを指定すると、大文字と小文字を区別せずに検索を行い ます。 ○ l オプション このオプションを指定すると、検索文字列・置換文字列を正規表現パ ターンではなくて純粋な文字列として扱います。「\」によるエスケー プは一切できなくなります。 このオプションを指定しない場合、検索文字列・置換文字列を正規表現 パターンとして扱います。 ○ r オプション このオプションを指定すると、行/ファイルの先頭からではなく末尾か ら検索を行います。 ○ x オプション 正規表現の「拡張表現」を有効にします。空白および # より後の部分 を無視するようにします。 ○ g オプション このオプションを指定しない場合は、各行 (/M オプションを指定した 場合は各ファイル) で最初に見つかった文字列だけが置換されます。 このオプションを指定すると、見つかった文字列は全て置換されます。 ● コマンド全体の例 ○ example.txt から「ABC」を検索します mfind "/ABC/" example.txt ○ カレントディレクトリ内の全てのテキストファイルから 「"A"」または「"a"」を検索します。 mfind "/\"A\"/i" *.txt ○ カレントディレクトリ内の全てのテキストファイルを UTF-8 文字コー ドで読み込み、カタカナを検索します。 mfind /E8 "/\p{IsKatakana}/" *.txt ○ カレントディレクトリ内の全てのテキストファイルについて 「Apple」を「Red」に、「Grape」を「Purple」に、置換します。 mfind /W "/Apple/Red/g" "/Grape/Purple/g" *.txt ○ example.txt から空行を全て削除します。 mfind /M /W "/(\r\n)+/$1/g" example.txt ○ カレントディレクトリ内の全てのテキストファイルについてエンコー ディングを Shift_JIS から UTF-8 に変更します。(置換は行わない) mfind /M /ES /W8 "//" *.txt なお、複数の置換を指示した場合は、一つ目から順番に置換されます。 例えば、 mfind /W "/a/b/" "/b/c/" *.txt では、「a」が「b」に置換された後で「b」が「c」に置換されるので、 結果的に「a」は「c」になります。 /P, /P:XXX オプションを指定した場合は、次の順番で置換します。 1. /P:XXX オプションでファイルから読み込んだ検索/置換文字列 2. /P オプションで標準入力から読み込んだ検索/置換文字列 3. コマンドライン引数で指定した検索/置換文字列 ■ 制限事項 一部の実行環境では、機能に制限があります。 Windows 98/ME では、標準入力からの読み込みおよび標準出力への結果の出力 において文字コードを変更することができません。 ■ バージョン情報 バージョン 0.2 (2006 年 1 月 24 日) 初版 バージョン 0.3 (2006 年 3 月 12 日) /M オプションの動作を変更 バージョン 1.0 (2006 年 5 月 22 日) 置換機能を追加 バージョン 1.1 (2006 年 6 月 25 日) エラーメッセージの修正 検索・置換文字列の「\」によるエスケープの修正 バージョン 1.2 (2006 年 7 月 2 日) BOM 無しの UTF-8/16 エンコーディングに対応 検索・置換文字列の書式を変更 /P オプションを追加 単純なオプションを一纏めにできるようにした ヘルプを標準エラー出力ではなく標準出力に出力するようにした バージョン 1.3 (2006 年 7 月 14 日) 結果の出力の際にコントロール文字をエスケープするようにした 置換文字列の「\」によるエスケープの修正 バージョン 1.4 (2007 年 4 月 8 日) オプションの指定の仕方を若干変更 バージョン 1.5 (2008 年 4 月 23 日) エラー処理の仕方を少し変更 バージョン 1.6 (2010 年 1 月 26 日) /B オプションが正しく動作していなかったのを修正 バージョン 1.7 (2010 年 3 月 8 日) /M オプション指定時「.」が改行 (LF) にマッチしていなかったのを修正 最新版は http://magicant.github.io/ にあります。 ■ 作者 まじかんと (magicant) 連絡先電子メールアドレス: magicant.starmen@nifty.com もしバグを見つけたらメールにてお知らせ下さい。 (C) 2006-2010 magicant