まくまくWindowsノート
findstr でファイル内の文字列を検索する
2009-11-19

findstr によるファイル内検索の基本

Windows の findstr (find) コマンドは、Linux の grep のようなものです。 たとえば、ファイル input.txt の中の aaa という文字列を含む行を検索するには以下のようにします。

C:\> findstr "aaa" input.txt

Windows なので、検索文字列はシングルクォーテーション ' ではなく、必ずダブルクォーテーション " で囲む必要があります。

空白を含む文字列を検索 (/C)

findstr コマンドで空白を含んだ文字列を検索しようとすると、デフォルトでは空白で区切られたキーワード群の OR 検索が実行されてしまいます。 空白を含む文字列全体をひとつのキーワードとして検索するには /C オプションを付けて検索文字列を指定する必要があります。

例: “aaa bbb ccc” という文字列を含む行を検索

C:\> findstr /C:"aaa bbb ccc" input.txt

例: “aaa”、”bbb”、”ccc” の OR 検索

C:\> findstr "aaa bbb ccc" input.txt

単語の AND 検索

findstr はフィルタとして使えるので、検索結果をさらにパイプで findstr に渡してやることで、絞り込みながら検索していくことができます。

例: “aaa” と “bbb” の両方を含む行を検索

C:\> findstr "aaa" input.txt | findstr "bbb"

単語の OR 検索

キーワードをスペースで区切ると、OR 条件でキーワードを検索することになります。

例: “aaa” あるいは “bbb” を含む行を検索

C:\> findstr "aaa bbb" input.txt

空白を含むキーワードの OR 検索を行いたい場合は、”/C” オプションによるリテラルを複数指定します。

例: “aaa bbb” あるいは “ccc ddd” を含む行を検索

C:\> findstr /C:"aaa bbb" /C:"ccc ddd" input.txt

大文字/小文字を無視して検索 (/I)

C:\> findstr /I "hoge" input.txt

正規表現でファイル内の文字列を検索する

findstr はオプションなしで検索キーワードを指定すると、そのキーワードは正規表現だとみなされます(/R オプションを指定した場合と同様)。 正規表現ではなく、単純な文字列リテラルとして検索したい場合は /L オプションを指定します。

"pattern"     # 正規表現として検索
/R "pattern"  # 正規表現として検索
/L "pattern"  # 文字列リテラルとして検索

例: php ファイルの中から、行頭が function で始まる行を検索

D:\> findstr "^function" *.php

ちなみに行頭にある文字列を検索するには、上記のように正規表現で検索する代わりに、/B オプションを利用することもできます。

D:\> findstr /B "function" *.php

findstr で使用できる正規表現については findstr /? を参照してください。

/C オプションとの関係

前述のように、空白を含む検索キーワードを使用する場合は /C オプションを指定しますが、/C オプションだけを指定した場合は、そのキーワードは文字列リテラルとみなされます(/L オプションを指定した場合と同様)。

/C:"aaa bbb"     # 空白を含む文字列リテラルとして検索
/L /C "aaa bbb"  # 空白を含む文字列リテラルとして検索
/R /C:"aaa bbb"  # 空白を含む正規表現として検索
2009-11-19