Linuxのgrepコマンドのように、Windows PowerShellでもファイルやコマンド出力から文字列を検索したいという場面は多いはずです。
そんなときによく話題に上がるのが「findコマンド」と「Select-String」ですよね。
でも、こんな疑問はありませんか?
findってPowerShellでも使えるの?Select-Stringとの違いは?
今回は、PowerShellで文字列を検索する方法を基礎から応用まで解説します。
PowerShellでも使える? findコマンドとは

実は、findはWindowsに古くからあるコマンドプロンプト(cmd.exe)由来のコマンドで、PowerShellでも使うことはできるんです。
基本構文(PowerShellでもOK)
find "検索語" ファイル名
例:sample.txtから「error」を検索
find "error" sample.txt
結果:errorを含む行だけが表示されます。
シンプルで使いやすいのが特徴ですね。
findstrとの違い
findstrはより高機能な検索ツールで、正規表現や複数キーワードの検索が可能です。
findstr /R /C:"エラー.*失敗" sample.txt
findstrはgrepに近い動きをします。こちらもコマンドプロンプト由来のコマンドです。
PowerShellネイティブの検索方法:Select-String
PowerShellを使うなら、より強力で柔軟な検索が可能なSelect-Stringコマンドレットがおすすめです。
基本構文
Select-String -Pattern "検索語" -Path "ファイル名"
例
Select-String -Pattern "error" -Path "sample.txt"
出力例
sample.txt:3: error: failed to start
行番号やファイル名も表示され、複数ファイル対応・正規表現サポート・パイプとの相性抜群なんです。
パイプで他のコマンドと組み合わせる

PowerShellの真価が発揮されるのは、パイプとの組み合わせです。
Get-Contentと組み合わせ
Get-Content sample.txt | Select-String "error"
直接文字列を検索
"これはテストです" | Select-String "テスト"
この柔軟性がPowerShellらしい使い方ですね。
よく使うオプション・応用例
Select-Stringには便利なオプションがたくさんあります。
| オプション | 内容 |
|---|---|
-AllMatches | 同じ行に複数マッチしてもすべて表示 |
-NotMatch | パターンに一致しない行を表示 |
-CaseSensitive | 大文字小文字を区別 |
-Encoding UTF8 | 文字コード指定(日本語対応時に重要) |
これらのオプションを使いこなすと、より高度な検索ができるようになります。
findとSelect-Stringの違いまとめ
それぞれの特徴を表でまとめました。
| 項目 | find | Select-String |
|---|---|---|
| 使用元 | cmd.exe | PowerShellネイティブ |
| 正規表現 | × | ○ |
| ファイル指定 | 単一のみ | 複数可 |
| 出力情報 | 行のみ | 行番号・ファイル名あり |
| 日本語の扱い | 弱い | 強い(エンコーディング指定可) |
PowerShellを使うなら、Select-Stringの方が圧倒的に便利ですね。
まとめ:PowerShellではSelect-Stringを使いこなそう!
Windows PowerShellでは、昔ながらのfindも使えますが、より柔軟で高性能なSelect-Stringを使うのがおすすめです。
ファイルの中身を調べたいとき、ログからキーワードを抽出したいときなどに重宝します。
ポイントまとめ
findはシンプルで軽量、PowerShellでも使用可- 正規表現や複数ファイル対応なら
Select-String一択 - パイプとの組み合わせやスクリプト化にも最適
- 日本語やUTF-8の扱いも
Select-Stringが優秀


コメント