FINDSTR(高度な文字列検索)
find コマンドではシンプルな文字列検索しかできませんが、FINDSTR コマンドを使用すると、正規表現を使った高度なパターン検索が可能になります。
この記事では、FINDSTR コマンドの基本から正規表現、複数条件検索、パイプとの組み合わせまで、具体的なサンプルコードを交えて解説します。
FINDSTR の基本構文
FINDSTR [オプション] "検索文字列" [ファイル名]
基本的な使用例
ファイル内から特定の文字列を含む行を検索します。
findstr "error" log.txt
主要オプション
| オプション | 説明 |
|---|---|
/I | 大文字・小文字を区別しない |
/S | サブフォルダも再帰的に検索 |
/R | 検索文字列を正規表現として扱う |
/L | 検索文字列をリテラル(文字どおり)として扱う |
/C:"文字列" | 検索文字列をスペース含めてそのまま検索(既定ではリテラル) |
/X | 行全体が完全に一致する行のみ表示 |
/G:ファイル | 検索文字列をファイルから読み込む |
/D:ディレクトリ | セミコロン区切りのディレクトリ一覧から検索 |
/V | 一致しない行を表示(除外検索) |
/N | 一致した行の行番号を表示 |
/M | 一致したファイル名のみ表示 |
/B | 行頭に一致するパターンを検索 |
/E | 行末に一致するパターンを検索 |
/C: を使わずに指定した検索文字列は、正規表現の特殊文字(. や * など)を含む場合に正規表現として解釈されます。. や $ を文字どおり検索したい場合は /L を指定するか、\. のようにバックスラッシュでエスケープしてください。
大文字・小文字を区別しない検索(/I)
findstr /I "warning" log.txt
Warning、WARNING、warning のいずれにも一致します。
スペースを含む文字列を検索する(/C:)
スペースを含む文字列を検索する場合は、/C: オプションを使用します。
findstr /C:"disk full" log.txt
/C: を使わずに findstr "disk full" log.txt
と記述すると、「disk」または「full」を含む行が検索されます(OR
検索になります)。スペースを含む文字列を正確に検索したい場合は /C: を使用してください。
一致しない行を表示する(/V)
/V オプションは、検索文字列に一致しない行を表示します。
findstr /V "^rem " script.cmd
行番号を表示する(/N)
findstr /N "TODO" main.cmd

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
正規表現を使った検索
FINDSTR は基本的な正規表現をサポートしています。
使用可能な正規表現
| 記号 | 意味 | 例 |
|---|---|---|
. | 任意の 1 文字 | h.t → hot, hat |
* | 直前の文字の 0 回以上の繰り返し | ab*c → ac, abc, abbc |
^ | 行頭 | ^echo |
$ | 行末 | error$ |
[abc] | 角括弧内のいずれか 1 文字 | [aeiou] → 母音 |
[a-z] | 範囲内のいずれか 1 文字 | [0-9] → 数字 |
[^abc] | 角括弧内の文字以外の 1 文字 | [^0-9] → 数字以外 |
\< | 単語の先頭 | \<the |
\> | 単語の末尾 | end\> |
正規表現の使用例
findstr /R "^echo" script.cmd
findstr /R "[0-9]" data.txt
findstr /R "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*" log.txt
FINDSTR の正規表現は非常に基本的なものです。+(1 回以上の繰り返し)、?(0 回または 1
回)、|(OR)、()(グループ化)といった拡張正規表現はサポートされていません。
複数の条件で検索する
OR 検索(いずれかを含む行)
検索文字列をスペースで区切ると、いずれかに一致する行が表示されます。
findstr /I "error warning" log.txt
AND 検索(すべてを含む行)
FINDSTR には AND 検索のオプションがないため、パイプで連結して絞り込みます。
findstr /I "error" log.txt | findstr /I "database"
検索結果を判定する
FINDSTR は、一致する行が見つかると終了コード(エラーレベル)0、見つからないと 1 を返します。バッチファイルでの存在確認に利用できます。
@echo off
findstr /I /C:"error" log.txt >nul
IF %ERRORLEVEL% EQU 0 (
echo エラーが記録されています。
) ELSE (
echo エラーは記録されていません。
)
複数のファイルを検索する
ワイルドカードで指定
findstr "error" *.txt
サブフォルダを含めて検索(/S)
findstr /S "TODO" *.cmd
一致したファイル名だけを表示する(/M)
findstr /M /S "password" *.txt
検索文字列を含むファイルの名前だけを表示します。内容は表示されません。
パイプと組み合わせる
他のコマンドの出力をフィルタリングする場合に、パイプ | と組み合わせて使用します。
tasklist | findstr /I "chrome"
netstat -an | findstr "443"
FIND コマンドとの使い分け
| 特徴 | FIND | FINDSTR |
|---|---|---|
| 正規表現 | × | ○ |
| 再帰検索 | × | ○(/S) |
| 複数条件検索 | × | ○(スペース区切り、/G) |
| 一致行数のカウント | ○(/C) | × |
| 行番号表示 | ○(/N) | ○(/N) |
| 大文字小文字無視 | ○(/I) | ○(/I) |
| 除外検索 | ○(/V) | ○(/V) |
FINDSTR は UTF-8 や UTF-16 のファイルを正しく扱えない場合があります。日本語を含むファイルで検索結果が期待どおりにならないときは、文字コードを確認してください。詳しくは文字コードの解説も参照してください。
シンプルな固定文字列の検索には find コマンドを、正規表現やサブフォルダ検索が必要な場合は
findstr を使用するのが適切です。
まとめ
この記事では、FINDSTR コマンドの使い方について解説しました。
FINDSTR は、正規表現による検索、サブフォルダの再帰検索、パイプとの連携など、FIND コマンドでは対応できない高度なテキスト検索を実現する強力なコマンドです。