12. Windows PowerShell で正規表現
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
|