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

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ












