findstr は Windows で grep のようにテキストファイルの文字列検索を行う
Windows でテキストファイルの中から任意の文字列を含む行を抽出したい場合はPowerShellやコマンドラインで findstrコマンドを使います。
ちなみにテキストファイルの場所でPowerShellやコマンドプロンプトを開きたい場合はそのフォルダ上でShiftを押しながら右クリックすると「PowerShellウィンドウをここに開く」というのが表示されますのでそれをクリックすれば cd (Currend Directory) がそのフォルダになった状態で開きますので便利です。
findstr の基本的な使い方
複数ファイル指定することもできます。
*によるワイルドカードでの指定もできます。以下はtestを含むファイル全てから検索する場合。
コマンド結果から特定文字列を含む行だけ抽出したい場合は| (パイプライン) を使います。
findstr のAND条件/OR条件等の複数条件や否定
以下のtest.txtファイルを配置した上で、AND/OR条件の指定をしたコマンドとその結果を示します。
---test.txt---
a b a c b c b d c D
OR条件
a もしくは b (OR条件) はオプションは不要です。
> findstr "a b" test.txt a b a c b c b d
AND条件
a かつ b (AND条件) は | (パイプライン) を使います。
> findstr "a" test.txt | findstr "b" a b
否定条件
a ではない(否定条件)は /v を使います。
> findstr /v "a" test.txt b c b d c D
NOR
a でも bでもない(NOR)も /v でOKです。
> findstr /v "a b" c D
空白のエスケープができない、そんなときは
純粋に"a b"(a空白b)という文字列とを含む行だけを抽出したい場合はどうするの?というと、/c: オプションを使います。
> findstr /c:"a b" a b
複数並べてor条件にも出来ます。
> findstr /c:"a b" /c:"b d" a b b d
なお、通常のエスケープは\でOKです。例えば$という文字列を検索したい場合は"\$"で検索します。
> findstr "\$"
大文字小文字無視オプション
/i は大文字小文字の区別をしなくなります。(case-insensitive)
> findstr /i d test.txt b d c D
正規表現オプション
/r は正規表現での検索が可能になります。
> findstr /r .*D$ test.txt c D
/b は 行の先頭、/e は行の末尾の検索で使えます。それぞれ正規表現の^ 、 $ にあたります。
> findstr /b b test.txt b c b d
> findstr /e b test.txt a b
その他のオプション
/s
現在のディレクトリとすべてのサブディレクトリから一致するファイルを検索します。
/x
完全に一致する行を出力します。
/n
一致する各行の前に行番号を出力します。
/m
ファイルに一致する行があるときに、ファイル名のみを出力します。
/o
一致する各行の前に文字オフセットを出力します。
/p
印刷不可能な文字を含むファイルをスキップします。
/off(line)
オフライン属性が設定されたファイルをスキップしません。
/a:属性
2 桁の 16 進数で色属性を指定します。"color /?" を参照してください。
/f:ファイル
指定したファイルからファイル一覧を読み取ります (/ を指定するとコンソール)。
/g:ファイル
指定されたファイルから検索文字列を取得します (/ を指定するとコンソール)。
/d:ディレクトリ
セミコロンで区切られた検索されるディレクトリ文字列テキストの一覧を検索します。