Windowsでgrep|findstrコマンドで特定の文字を含む行のみ表示する方法

目次

スポンサードリンク

WindowsのコマンドプロンプトまたはPowerShellで、テキストファイルの内容から特定の文字を含む行を抽出する方法を解説します。

使用するテストデータ

テストデータとして、10件の日付を保存したテキストファイルを用意しておきます。

C:\work>type test.txt
1990/4/7
2004/5/3
1980/9/6
1994/2/6
2004/2/12
2008/11/16
1997/1/1
1996/9/8
1975/1/23
2005/12/16

findstr コマンドの使い方

以下サンプルでは、findstr コマンドを使って test.txt の内容から 2004 を含む行のみフィルタリングして表示しています。

# コマンドプロンプトの場合
C:\work>findstr 2004 test.txt
2004/5/3
2004/2/12

# PowerShellの場合
PS C:\work> findstr "2004" .\test.txt
2004/5/3
2004/2/12

また、findstrコマンドでは 正規表現を使用することもできます。以下は200で始まる文字列を含む行を表示しています。

PS C:\work> findstr "200*" .\test.txt
2004/5/3
2004/2/12
2008/11/16
2005/12/16

特定の文字を含まない行のみ表示する方法

/v オプションを付けることで、条件に指定した文字列を「含まない」行だけを表示することもできます。

PS C:\work> findstr /v "2004" .\test.txt
1990/4/7
1980/9/6
1994/2/6
2008/11/16
1997/1/1
1996/9/8
1975/1/23
2005/12/16

行番号も一緒に表示する方法

findstrコマンドでは /n オプションを付けることで、条件に該当した文字列の行番号を一緒に表示することができます。

PS C:\work> findstr /n "2004" .\test.txt
2:2004/5/3
5:2004/2/12

type コマンドとfindコマンドを組み合わせる方法

ファイルの内容を表示する type コマンドと、特定の文字を含む行に絞り込む find コマンドを組み合わせて実行する方法もありますが、findstrコマンドの方がシンプルに記述できます。

C:\work>type test.txt | find "2004"
2004/5/3
2004/2/12

PowerShellで上記コマンドを実行すると、「FIND: パラメーターの書式が違います」とエラーになります。これは、PowerShell実行時に、find コマンドの引数として与えた文字列を囲む ダブルクォーテーションが消えてしまうためです。ダブルクォーテーションで囲んだ文字列を、シングルクォーテーションで囲むことでエラーが解消されます。

PS C:\work> type test.txt | find '"2004"'
2004/5/3
2004/2/12



コマンドプロンプトのポケットリファレンス:Windows11対応版

PowerShellの基礎を一通り学べるおすすめ書籍