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