古くなったgrepのような同じ検索ツールにうんざりしていませんか?妥協する必要はありません。Windowsには多くのgrep相当ツールがあり、正確に探している情報を検索するのに役立ちます。
このチュートリアルでは、これらのgrep相当ツールがどのようにしてファイルを高速で検索し、必要な情報を簡単に見つけることができるかを学びます。
お楽しみにして、強力な検索ツールを使いこなしましょう!
前提条件
このチュートリアルでは実際のデモンストレーションを行います。一緒に進めるために、以下の準備を整えてください。
- A Window machine – This tutorial uses Windows 10 PC, but any version of Windows will suffice.
- PowerShell – このチュートリアルではPowerShell 7.2.8を使用します。
- scoop – このチュートリアルではscoop v0.3.1を使用します。
特定のテキスト文字列(findstr
)をファイル内で検索する
ファイル内で特定の文字列(特定のパターンを持つ)を瞬時に見つけることができれば、作業効率が大幅に向上します。しかし、どうやって見つけるのでしょうか?Windowsのfindstr
コマンドラインユーティリティを利用し、ファイル内で特定のテキスト文字列を検索することができます。
findstr
は、Windowsでよく使用されるgrepの代替として使用されます。Unixのgrep
コマンドと似た機能を持っています。 findstr
を使用する利点は何ですか? 1つの例は、Windowsオペレーティングシステム(OS)に組み込まれているため、追加のソフトウェアは必要ありません。
ファイル内の特定の文字列を見つけるには、次の手順に従ってください:
お好みのテキストエディタでテキストファイルを作成し、notes.txtという名前を付け、以下の内容をファイルに追加します。
Hello, world. This is an example of a text file.
I am writing some notes in this file.
Here are some keywords to search for: apple banana cherry.
次に、管理者として PowerShellを開き、以下のコマンドを実行して、notes.txt
ファイル内の検索パターン(”apple"
)に対して文字列(findstr
)を検索します。
? findstrには、検索をカスタマイズするために使用できる多くのパラメータがあります。ただし、このチュートリアルでは、ファイル内の文字列を検索する際に最も有用ないくつかのパラメータを探求します。

? おそらく、複数のファイルで文字列を検索しています。その場合は、以下のようにスペースで区切られたファイルパスを指定します:
findstr パラメーター "パターン" "C:\\path\\to\\file1.txt" "C:\\path\\to\\file2.txt"
特定のパターンまたはリテラルに一致する文字列の検索
設定ファイルを扱う際には、特定のパターンやリテラルの文字列を見つけることが重要です。特にデバッグ時には有用です。幸いにも、/c
パラメータをfindstr
コマンドに指定すると、指定したパターンに一致するリテラル文字列を検索することができます。これにはスペースや特殊文字も含まれます。
/c
パラメータをfindstr
コマンドに追加することは、以下のような場合に役立ちますが、これに限定されません:
- 特定のフレーズや単語のセットを特定の順序で検索する場合。
- スペースや特殊文字を含む文字列を検索する場合。
/c
パラメータの動作を確認するには、以下の手順に従ってください:
1. 以下のfindstr
コマンドを実行して、*notes.txt*
ファイル内でリテラル文字列(/c
)banana cherry
を検索します。
以下の出力では、findstr
コマンドは、2つの単語の間にスペースがある正確な文字列banana cherry
を含む行のみを返します。
/c
パラメータは大文字と小文字を区別するため、findstr
コマンドは指定した文字列の正確な大文字と小文字の組み合わせのみを返します。もしnotes.txtファイルのいずれの文字列も指定したパターンと一致しない場合、findstr
コマンドは空の出力を返します。

2. 次に、notes.txtファイルに以下の行を追加し、変更を保存します。
この時点では、notes.txtファイルには「hello」という文字列が2つの行にあります。1つはすべて小文字の行(hello, world.
)、もう1つは大文字の「H」を含む行(Hello, world.
)です。
hello, world.
3. 以下のコマンドを実行して、notes.txt
ファイル内のhello, world
またはHello, world
の文字列リテラルを検索します。
下記のように、notes.txtファイルには「hello, world」という文字列を含む2つの行があるにもかかわらず、結果は1行しか表示されません。
/c
パラメータは、findstr
コマンドに対して、大文字小文字を区別せずに「hello, world」という文字列を含む行を表示するよう指示します。

4. 最後に、notes.txt
ファイル内でhello
パターンを含む文字列を検索するために、以下のfindstr
コマンドを実行します(大文字小文字を区別しない)。
文字列の実際の大文字小文字をすでに知っている場合、大文字小文字を区別する検索は正常に機能します。しかし、大文字小文字を区別せずにパターンに一致するすべての行を表示したい場合は、/i
パラメータを使用します。

ファイルとディレクトリ内の指定された文字列の検索
ファイル内、ディレクトリ内、およびサブディレクトリ内の一致する文字列を検索するために、findstr
コマンドを使用することができます。
特定の単語を含むディレクトリ内のすべてのファイルを検索したい場合、/s
パラメータを使用します。
以下のコマンドを実行して、現在のディレクトリおよびそのサブディレクトリ (/s
) 内のすべてのファイル (*.*
) から、大文字小文字を無視して system
という文字列を含むファイルを検索します (-i
)。
このコマンドは、単語全体としての system
という文字列を含むファイルのみを検索し、systematic や systemize などの一部の単語を含むファイルは検索しません。
以下の出力は、各行に1つのファイル名を表示し、’system’ 文字列を含む各ファイルの名前が表示されます。

Select-String
コマンドレットを使用した文字列の検索
これまでに、findstr
コマンドが文字列の検索に優れていることを見てきましたが、Select-String
コマンドレットも見逃せません。このコマンドレットは、Windowsでのgrep
と同等であり、ファイルや文字列内の特定のテキストパターンを検索することができます。
Select-String
コマンドレットは効率的に設計されており、大量のテキストを素早く検索し、正規表現 (regex)をサポートしています。そのため、このコマンドレットを使用すると、findstr
よりも複雑なパターンの検索が可能になります。
Select-String
コマンドレットの動作を確認するには、次の手順に従ってください:
1. まず、notes.txtファイルを開き、以下の行を追加して変更を保存します。
これらの行を追加することで、後続の手順でSelect-String
コマンドレットが大文字と小文字をどのように処理するかをデモンストレーションする準備が整います。
Apple
APPLE
ApplE
2. 次に、以下のコマンドを実行して、notes.txt
ファイル内の文字列apple
を検索します。
以下に示すように、複数の行には大文字と小文字が異なる「apple」文字列が含まれています。これは、Select-String
コマンドレットが大文字と小文字を区別しないためです。ただし、マッチした文字列はハイライト表示されるため、簡単に確認できます。

? おそらく、正規表現の代わりに単純な文字列の一致を使用したい場合があります。その場合は、以下に示すように
-SimpleMatch
パラメータを追加し、正規表現の構文や特殊文字を心配する必要はありません。Select-String 'APPLE' "C:\\myfiles\\notes.txt" -SimpleMatch
3. 次に、以下のコマンドを実行して、notes.txt
ファイル内のAPPLE
を大文字と小文字を区別して検索します(-CaseSensitive
)。-CaseSensitive
パラメータは、検索の正確性を高めるのに役立ちます。
以下の結果からわかるように、唯一のマッチは指定した正確な大文字と小文字の組み合わせ(APPLE)です。

4. 最後に、以下のコマンドを実行して、正規表現を使用して$PSHOME\en-US
ディレクトリ内のすべてのテキストファイル(*.txt
)でパターン'\?'
(疑問符)を検索します。正規表現を使用すると、より複雑なパターンを検索することができます。
ファイルの内容に疑問符が含まれている場合、コマンドは次のようにファイルのフルパスをコンソールに表示します。

Windowsでgrepと同等の機能を持つripgrep(rg)を使用する
rgは、正規表現パターンを使用してファイルを高速に検索するために設計されたオープンソースのコマンドラインユーティリティです。他のコマンドラインユーティリティと同様に、rgには検索をカスタマイズするための多くのオプションと機能があります。
ただし、findstr
やSelect-String
コマンドレットとは異なり、rgはWindows OSにデフォルトでインストールされていません。
Windowsでgrepとしてrgを使用するには:
1. 以下のscoop
コマンドを実行して、システムにripgrep
をinstall
します。scoop install ripgrep

2. 次に、次のrg
コマンドを実行して、rgのインストールされたバージョンを確認します。
以下に示すように、インストールされたrgのバージョン番号が表示されます。この時点で、rg
コマンドを実行して文字列を検索することができます。

3. 以下のrg
コマンドを実行して、notes.txt
ファイル内の文字列apple
を検索します。
出力には、notes.txtファイルに含まれる文字列appleを含む行が表示されます。
出力はSelect-String
コマンドレットの出力と似ていることに注意してください。ただし、rg
ではハイライトではなく、一致した文字列と行番号の色が変更され、素早く区別することができます。

4. 次のコマンドを実行して、notes.txt
ファイル内の文字列を正規表現を使用して検索します。
以下の正規表現は、単語境界(\b
)を使用し、rg
に対して、’s’で始まり’e’で終わる単語を含む文字列の行を検索するよう指示しています(s\w+e
)。

特定のファイルタイプでの検索結果の絞り込み
おそらく、特定のディレクトリにあるファイルの名前にはこだわらず、ファイルの内容で検索する場合には、ファイルタイプで検索結果を絞り込むことが最適な方法です。
特定のファイルタイプでの検索結果の絞り込みは、特定の種類のファイルのみを検索する場合や、特定の種類のファイルを検索から除外したい場合に便利です。
特定のファイルタイプでの検索結果の絞り込みには、次のように--type
オプションを使用します:
1. 以下のrg
コマンドを実行して、C:\\myfiles
ディレクトリ内のすべてのテキストファイル(--type txt
)で文字列apple
を検索します。
--type
オプションは、ファイルタイプを引数として受け取り、指定したファイルタイプに一致するファイルのみを検索するようrg
コマンドに指示します。
以下の出力は、文字列’apple‘を含む行と関連するファイル名(notes.txt)を示しています。

2. 次に、notes.xmlという名前のXMLファイルを作成し、以下のコードを入力します。このXMLファイルは、ワイルドカード検索の動作を示すための準備です。
3. 以下のコマンドを実行して、すべての (*.
) 内で文字列 apple
を検索します。このコマンドは、指定されたように txt
と xml
ファイルのみを検索します (-g
)。
デフォルトでは、rg
は大文字と小文字を区別します。その結果、出力には文字列 ‘apple’ を含む行と関連するファイルのみが表示されます。

4. 最後に、ステップ3と同様に以下のコマンドを実行して、拡張子が txt
または xml
のすべてのファイル (*.
) 内で文字列 apple
を検索します。ただし、今回は -i
オプションを追加し、rg
に大文字と小文字を区別しないよう指示します。

結論
このチュートリアルを通じて、Windows で文字列をリテラルと正規表現を使用して検索するためのさまざまな grep 同等の方法を学びました。さまざまなオプションとパラメータを使用して検索をカスタマイズし、特定のファイルタイプに絞り込むための grep 同等の機能を活用しました。
この時点で、問題のデバッグ、問題の特定、大量のテキストファイルの検索に自信を持てるはずです。
さあ、新しいスキルを活かして、正規表現を使った練習や検索のカスタマイズをしてみましょう。
Source:
https://adamtheautomator.com/grep-equivalents-in-windows/