PowerShellでのテキストモードとバイナリモード
PowerShellのコマンドの中には、直接ファイルを読み込んで処理できるものが60個程度ある。これらは、基本的にはテキストモードを使う。たとえば、文字列検索のSelect-Stringコマンドは、テキストモードでファイルを読み込んで文字列検索をする。
このコマンドに限らず、テキストモードで読み込まれたテキストファイルは、行末文字が内部コードに置き換わるので、検索などで行末文字を見つけることができないことが多い。この点には注意しないと、複数行にまたがるパターンを検索しようとしてうまくいかなくなることがある。
正規表現エンジンにも、シングルラインモード、マルチラインモードといった動作モードがある。マルチラインモードでは、行末文字を認識して複数行のテキストとして検索をする。このため、行末文字自体を検索することはできず、代わりに文頭や文末を表わすアンカーを利用する。もちろん、行末文字は読み込み時に変換されてしまうので、行末文字を表わすエスケープ文字「\n」などもヒットしない。
これに対してシングルラインモードでは、行末文字も普通の文字のように扱われ、たとえば、任意の1文字を表わす「.」に行末文字がヒットするようになる。この場合、アンカーは検索対象の先頭と末尾にしか一致しなくなる。しかし、複数行にまたがるパターンを検索できるようになる。
なお、Windowsでは、シングルラインモードのときの行末文字CRLFは、「\r\n」と指定する必要がある。シングルラインモードでは、行末文字がどうなっているのかを理解しておく必要がある。
前述のように、ファイルをテキストとして扱うかどうかは、プログラムの問題である。PowerShellのコマンドのほとんどは、ファイルをテキストモードで読み込む、このため、多くの場合は複数行にまたがる処理ができない。
バイナリモードでファイルを扱いたい場合、Get-Contentコマンドに「-Raw」オプションを付けて読み込み、これをコマンドで処理する。こうして読み込まれたファイルなら、select-stringコマンドで行末文字を含む部分を探すこともできる。たとえば、行末文字を含むパターン「1\nT」のようなパターンを検索したければ、
Get-Content -Raw <ファイルパス> | select-String '1\nT
とする。
逆に「-Raw」オプションがなければ、Get-Contentコマンドは、ファイルをテキストモードで読み込み、パイプには分解された複数のテキスト行を送り出す。この場合、後続のSelect-Stringコマンドでは、これを1行1行個別に検索処理をするため、複数行にわたるパターンを検索することができず、行末文字も見つからない。
行末文字を扱えるかどうかは、コマンド自体の問題である。ファイルを直接読み込めるPowerShellの大半のコマンドは、テキストモードで動作している。これを理解しないと、Select-Stringコマンドで直接ファイルを読み込んだとき、行末文字が見つからなくて悩むことになりかねない。バイナリモードでファイルを扱いたいならば、必ずGet-Contentコマンドで「-Raw」オプションを使う。
テキストファイルと普通に呼んでいるため、世の中には「テキストファイル」という特別なファイルが存在するかのような気がしているが、実際には、テキストファイルは約束事でしかない。テキストファイルをテキストファイルとして成り立たせているのは、これを読み込むプログラムであるということは、きちんと理解しておいたほうがいいだろう。
この連載の記事
-
第429回
PC
Windows Updateの「利用可能になったらすぐに最新の更新プログラムを入手する」はオンにした方がいいか? -
第428回
PC
Google/Bingで使える検索オプション -
第427回
PC
WindowsのPowerShellのプロファイルを設定する -
第426回
PC
WindowsでAndroidスマホをWebカメラにする機能を試した -
第425回
PC
無料で使えるExcelにWord、Microsoft 365のウェブ版を調べた -
第424回
PC
Windowsの基本機能であるクリップボードについてあらためて整理 -
第423回
PC
PowerShellの今を見る 2つあるPowerShellはどっち使えばいい? -
第422回
PC
Windows 11の目玉機能が早くも終了、Windows Subsystem for Android(WSA)を振り返る -
第421回
PC
進化しているPowerToys LANで接続したマシンでキーボード/マウス共有機能などが追加 -
第420回
PC
Windowsプレビュー版に搭載されたsudoを試す -
第419回
PC
Windows Insider Previewが変わって、今秋登場のWindows 11 Ver.24H2の新機能が見えてきた? - この連載の一覧へ