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の基礎を一通り学べるおすすめ書籍
リンク
Search
Recent Posts
- OpenSSHのエラー「bad ownership or modes for chroot directory component」の原因と解消方法
- Apacheの起動状態をチェックして停止してる場合にApacheを起動するシェルスクリプト
- Amazon LinuxのOSバージョンを調べる方法|/etc/redhat-release の代替ファイル
- MYSQLでダンプファイルを取得する際に発生したエラー「Couldn't execute 'SELECT BINLOG_GTID_POS('', '0')': You are not using binary logging (1381)」の原因と対処方法
- RHEL系Linuxでリポジトリを一覧表示するコマンド(dnf repolist)