PowerShellでgrepのような文字列検索を実現する方法【UTF-8・Shift-JIS対応・サブフォルダ対応】
2025-05-16
Linux の grep
コマンドは強力なテキスト検索ツールとして多くのユーザーに親しまれています。一方、Windows 環境で作業するエンジニアにとって、「PowerShell で grep のような文字列検索を実現したい」と考えることも多いのではないでしょうか?
この記事では、PowerShell を使って Linux の grep
のような文字列検索を実現する方法を詳しく解説します。特に以下の3つのニーズに対応したスクリプトを紹介します。
- ✅ サブフォルダを含めた検索
- ✅ 複数の文字列を一度に検索
- ✅ UTF-8 および Shift-JIS(Windowsの文字コード)に対応
さらに、検索を簡単にするために PowerShell に grep
関数を追加する方法も紹介します。
PowerShell で grep のような検索をするには?
PowerShell では Select-String
コマンドレットを使えば簡単な文字列検索は可能です。しかし、日本語を含むファイルで文字コードが UTF-8 や Shift-JIS 混在の場合、正しく読み込めないことがあります。
また、複数のキーワードにマッチするファイルを再帰的に検索したい場合、Select-String
だけでは柔軟性に欠けることも。
そこで本記事では、以下の条件をすべて満たすカスタム関数を PowerShell で作成していきます。
grep 関数の定義(UTF-8 / Shift-JIS対応)
function grep {
param (
[string[]]$Pattern,
[string]$Path = ".",
[string]$Filter = "*.*"
)
$encodings = @("utf8", "shift-jis")
Get-ChildItem -Path $Path -Filter $Filter -Recurse -File | ForEach-Object {
$file = $_.FullName
$content = $null
foreach ($enc in $encodings) {
try {
$content = Get-Content -Path $file -Encoding $enc -ErrorAction Stop
break
} catch {}
}
if ($content) {
foreach ($line in $content) {
foreach ($kw in $Pattern) {
if ($line -match $kw) {
Write-Output "$file :\t $line"
break
}
}
}
}
}
}
grep 関数の使い方
関数を定義したら、以下のように簡単に使用できます。
例1:カレントフォルダ以下のすべてのファイルから「エラー」や「失敗」を検索
grep -Pattern "エラー", "失敗"
例2:特定のフォルダでログファイルから「Exception」を検索
grep -Path "C:\Logs" -Filter "*.log" -Pattern "Exception"
関数を永続化する方法:毎回使えるようにする
この関数を毎回入力せずに使いたい場合は、PowerShell のプロファイルファイル($PROFILE
)に追加します。
notepad $PROFILE
上記コマンドでプロファイルファイルを開き、grep
関数のコードを貼り付けて保存すれば、次回以降すぐに使用できます。
grep.ps1
ファイルを作った場合は、$PROFILE
に . grep.ps1
を追記
PowerShell で grep を使うメリット
PowerShell に grep
相当の関数を追加することで、以下のようなメリットが得られます。
- Windows環境で Linux のような作業効率が実現できる
- 複数文字検索や正規表現も使える柔軟なフィルタリング
- 文字コードの違いに対応できるため、文字化けやエラーを回避
Windows 環境におけるロギング分析やバッチファイル処理の中で、grep
のような関数が使えると非常に便利です。
まとめ:PowerShell に grep を導入して作業効率アップ!
Linux の grep
に慣れている人にとって、Windows 環境でも同じような使い勝手を実現したいと感じることは自然です。
PowerShell のカスタム関数を活用することで、複数キーワード検索、サブフォルダ対応、UTF-8/Shift-JIS 対応という実用的な grep 相当のツールが手に入ります。
作業効率を上げたいエンジニア、IT 管理者の方にとって、非常に強力な武器になるはずです。ぜひこの記事の内容を参考に、あなたの PowerShell に grep
を追加してみてください。
WinUI 3 / XAML の Grid.Width 設定方法
WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】
MenuFlyout は WinUI 3 で便利なポップアップメニュー
WinUI 3の開発で混乱しがちな「空白のウィンドウ」と「空白のページ」の違い
PowerShellでMSIXアプリ(Storeアプリ)を起動する方法|AppUserModelIdとURIスキーム活用術
Microsoft Storeアプリ更新時のロールアウト設定まとめ
PowerShellでgrepのような文字列検索を実現する方法【UTF-8・Shift-JIS対応・サブフォルダ対応】
PowerShellでtail -f!WindowsでUTF-8対応のリアルタイムログ監視を実現する方法
Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法
Microsoft Authenticatorのオートフィル機能が2025年7月に終了