Windows の findstr
(find
) コマンドは、Linux の grep
のようなものです。
たとえば、ファイル input.txt
の中の aaa
という文字列を含む行を検索するには以下のようにします。
C:\> findstr "aaa" input.txt
Windows なので、検索文字列はシングルクォーテーション '
ではなく、必ずダブルクォーテーション "
で囲む必要があります。
findstr
コマンドで空白を含んだ文字列を検索しようとすると、デフォルトでは空白で区切られたキーワード群の OR 検索が実行されてしまいます。
空白を含む文字列全体をひとつのキーワードとして検索するには /C オプションを付けて検索文字列を指定する必要があります。
C:\> findstr /C:"aaa bbb ccc" input.txt
C:\> findstr "aaa bbb ccc" input.txt
findstr
はフィルタとして使えるので、検索結果をさらにパイプで findstr
に渡してやることで、絞り込みながら検索していくことができます。
C:\> findstr "aaa" input.txt | findstr "bbb"
キーワードをスペースで区切ると、OR 条件でキーワードを検索することになります。
C:\> findstr "aaa bbb" input.txt
空白を含むキーワードの OR 検索を行いたい場合は、”/C” オプションによるリテラルを複数指定します。
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" # 文字列リテラルとして検索
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" # 空白を含む正規表現として検索