PowerShellでgrepのような文字列検索を実現する方法【UTF-8・Shift-JIS対応・サブフォルダ対応】

2025-05-16 PowerShellでgrepのような文字列検索を実現する方法

Linux の grep コマンドは強力なテキスト検索ツールとして多くのユーザーに親しまれています。一方、Windows 環境で作業するエンジニアにとって、「PowerShell で grep のような文字列検索を実現したい」と考えることも多いのではないでしょうか?

この記事では、PowerShell を使って Linux の grep のような文字列検索を実現する方法を詳しく解説します。特に以下の3つのニーズに対応したスクリプトを紹介します。

さらに、検索を簡単にするために 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 環境におけるロギング分析やバッチファイル処理の中で、grep のような関数が使えると非常に便利です。

まとめ:PowerShell に grep を導入して作業効率アップ!

Linux の grep に慣れている人にとって、Windows 環境でも同じような使い勝手を実現したいと感じることは自然です。

PowerShell のカスタム関数を活用することで、複数キーワード検索、サブフォルダ対応、UTF-8/Shift-JIS 対応という実用的な grep 相当のツールが手に入ります。

作業効率を上げたいエンジニア、IT 管理者の方にとって、非常に強力な武器になるはずです。ぜひこの記事の内容を参考に、あなたの PowerShell に grep を追加してみてください。


WinUI 3 / XAML の Grid.Width 設定方法

WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】

MenuFlyoutWinUI 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月に終了

RuntimeBroker.exeとMsEdgeWebView2.exeとは?Windows 11のプロセスについて

PowerShellでGrapheme Clusterについて処理を考える