Windows Terminalをログイン時に自動起動するようにして、Quakeモードにしたら、これが便利だ。「Win+Shift+@」でいつでもウィンドウが開く。また、筆者の環境では4Kモニターの横幅で開くので2分割しても十分幅がとれる。そういうこともあって、ファイルのテキスト検索をPowerShellで済ませることにした。
実はPowerShellでもテキスト検索ができる
PowerShellでファイルのテキスト検索をするには、「select-string」コマンドを使う。基本的なコマンドの書式は、
select-string [-Pattern]〈REGX〉 [-Path] 〈PATH〉
である。なお、標準で「select-string」にはエイリアスが設定されていて「sls」と略記できる。「-Pattern」「-Path」オプションも省略可能なので、
sls '検索' *.txt
とできる。
注意が必要なのは、標準では検索は行単位なので、複数行がヒットした場合には複数表示が出ることだ。長いテキストファイルの中で特定のキーワードを含む行だけを見たいといった場合には便利だが、テキスト検索では多数のファイルから特定のキーワードを含むファイルを探すこともある。その場合には、「-List」オプションを指定することで、2つ目以降のヒット行の出力を省略できる。
ファイルの文字エンコードを指定することもできる。指定が可能なのは「ascii」「bigendianunicode」「default」「oem」「unicode」「utf7」「utf8」「uft32」の8つだけ。また、このエンコードで対象ファイルを特定することはできない。
PowerShellでは、BOMで判断が可能なテキストエンコーディングには自動で対応するため、UTF-8~UTF-32までBOM付きならばエンコードの指示に関係なくファイルを検索する。しかし、エンコード指定が必須の場合がある。それはシフトJISでの検索である。Windowsの日本語版では、これは「oem」として指定する。
ただし、oemを指定した場合は、BOMなしのUTF-8でエンコードされたファイルが検索できない。select-stringコマンドは、-Encodeオプションは1つしか指定できないためだ。結局、シフトJISとBOMなしUTF-8の検索は背反でどちらか一方のみできる。もっともデフォルトでシフトJISが優先になるエクスプローラーの検索機能よりはマシだろう。
もっともこのあたりは、個人の状況による。筆者は最近はテキストファイルをすべてBOMなしUTF-8にしているので、-Encodeオプションをつけないで検索している。シフトJISのファイルも探したい場合に限り、ヒストリ機能で直前のコマンドを呼びだし、「-Encode oem」を指定して実行させている。
PATHには、フォルダー名を含むワイルドカードを使ったパスが指定できる。たとえば、「*\*.txt」とすれば、サブフォルダーにある「*.txt」ファイルを検索対象にできる。注意するのは、このパターンでは必ずパス区切りが一致するため、カレントフォルダーは検索対象にならない点だ。サブフォルダーを含めて検索するような場合、後述するGet-ChildItemと組み合わせる必要がある。基本的には、select-stringは、そのままではサブフォルダーを含めての検索には使えないと思った方がよい。
コマンドの出力は、何もしなければ「ファイル名:行番号:該当行」となるが、パターンが見つかった行をそのまま表示してしまうため、行が長いと出力が面倒なことになり、結果が見づらくなる。ファイルのフルパスだけ、あるいはファイル名だけ表示できればよいことも多い。そういう場合、
sls 'IPアドレス' *.txt -Encoding oem -List | Select-Object Path
sls 'IP Address' *.txt -Encoding oem -List | Select-Object filename
などとして、表示したいプロパティのみをselect-Objectコマンドで取り出せばよい。なお、select-objectコマンドには、「select」というエイリアスが定義されている。
select-stringコマンドはMatchInfoオブジェクトを出力している。オブジェクトのプロパティなどは、Get-Memberコマンド(エイリアスはgm)で調べることができる。
コマンドの詳細な解説は、Microsoftのサイトにある。
●Select-String (Microsoft.PowerShell.Utility)
https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/select-string?view=powershell-5.1&WT.mc_id=ps-geth

この連載の記事
-
第470回
PC
Windows用のパッケージマネージャー「Winget」 プレビュー版で機能が充実してきた -
第469回
PC
Windows Updateの27年 悪役だった頃から改良が進んで、徐々に目立たない存在に -
第468回
PC
2025年のWindowsどうなる!? Windows Insider Programの状況をあらためて見る -
第467回
PC
Copilot+ PCのNPUでカメラを処理する「Windows Studio Effects」 その内容や効果は? -
第466回
PC
PowerToysの最近の新機能には、複数アプリを指定位置に起動する「ワークスペース」や新規作成のカスタマイズがある -
第465回
PC
WindowsのPowerShellからBluetoothデバイスを調べる -
第464回
PC
Windows 10のサポート切れまで1年を切った さてWindows 10マシンをどうする? -
第463回
PC
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる -
第462回
PC
Windows Terminal Preview版でSixelグラフィックスを扱う -
第461回
PC
Copilot+ PCを買ってみたが、「今焦って買う必要はない」のかもしれない -
第460回
PC
Windowsでsftpを使う - この連載の一覧へ