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
が優秀
コメント