12. Windows PowerShell で正規表現 

   12−1  Windows PowerShell
   12−2  文字列検索


12−1 Windows PowerShell

WindowsのPCでも、Windows 7 以降、Windows PowerShell (powershell.exe)が用意されました。
これによって、UNIX系シェルのようなCUIベースで本格的なスクリプト実行環境が整いました。イメージを大雑把に言えば、コマンド プロンプト(cmd.exe)の上位互換といえばよいでしょう。本当は、その表現では全く足りない非常に強力なツールなのですが、本ページの趣旨からは逸脱するので、そこはあまり踏み込まずにいきます。
前節までで紹介したような「Perlをインストールして、スクリプトファイルを書いて、コマンドプロンプトでそれを呼び出して実行、結果を取得」という複数段階の作業が、OSに標準装備の Windows PowerShell だけで完了します。
PowerShellの起動方法は、下記のいずれかが一般的です。
(1)スタートメニューから。(Windows8 では、アプリ一覧の中に「Window PowerShell」があります)。
(2)エクスプローラーの[ファイル]メニュー下に、「Windows Powershellを開く」があります。
(3)「ファイル名を指定して実行」で「powershell」と入力。

Windows PowerShell のウィンドウ


外観は「コマンドプロンプト」(cmd.exe)によく似たウィンドウですが、背景色が異なります。
このウィドウのプリンプトに対して DIR、CD、TYPE といった旧来のDOSコマンド類、PING、IPCONFIG といったコマンド類を使うことができます。CALC と打てば電卓が、NOTEPAD と打てば「メモ帳」が起動します。

Windows PowerShell はさらに、専用の命令群〜「コマンドレット」を数多く取り揃えています。本来の機能としては、コンピュータのシステム全体をすべて管理・操作できるのですが、本ページの趣旨は「正規表現を用いてのテキスト検索・加工」ですから、その点に絞って紹介することにします。


12−2 文字列検索

ise.txt から和歌を抜き出してみます。ファイルは D:\ にあるものとします。
ise.txt では、伊勢物語の各段を下記のフォーマットで記述してあります。
は全角空白、 は改行コードを意味します。)
C:121:梅の花笠

むかし、男、梅壷より雨にぬれて、人のまかりいづるを見て、
□□うぐひすの花を縫ふてふ笠もがなぬるめる人に着せてかへさむ
返し、
□□うぐひすの花を縫ふてふ笠はいな思ひをつけよほしてかへさむ



和歌の行頭には必ず全角空白が2つあるので、それを利用します。
◆ コマンドライン

 > Select-String -Path "ise.txt" -Pattern "^□□" -Encoding default

◆ スクリプトの意味
 Select-String …… 文字列(正規表現可)を検索するコマンドレット
 -Path "ise.txt" …… 検索対象のテキストファイルを指定
 -Pattern "^□□" …… 行頭に全角空白2つ(がある行)
 -Encoding default …… エンコード指定(とにかく付けておく)

Windows 版 Perl と違い、ファイルリストにワイルドカードも使用可能です。
実行結果です。(薄黄色の文字の部分が PowerShell による出力です)

 PS D:\> Select-String -Path "ise.txt" -Pattern "^□□" -Encoding default

 ise.txt:12:□□春日野の若むらさきのすりごろもしのぶの乱れ限り知られず
 ise.txt:15:□□陸奥のしのぶもぢずりたれゆゑに乱れそめにしわれならなくに
       :
       :
 ise.txt:1282:□□思ふこといはでぞただにやみぬべきわれとひとしき人しなければ
 ise.txt:1288:□□つひにゆく道とはかねて聞きしかど昨日今日とは思はざりを


 PS D:\> 


保存が必要であれば、出力先を任意のファイルへリダイレクトしましょう。

上記のコマンドレットには、別名(エイリアス)があります。
正式名より短くて、入力が楽です。


 PS D:\>sls "^□□" ise.txt -Encoding default


実は、前述の「DOSコマンドも使える」というのも、正確にはPowerShellのコマンドレットのエイリアスによって実現されています。
  ◆エイリアスの例◆

  コマンドレット  エイリアス(≒DOSコマンドに合わせてある)
  Get-ChildItem   DIR
  Set-Location    CD
  Get-Content    TYPE
  Write-Output    ECHO