WindowsとWindows以外のクロスプラットフォーム環境で作業したことがある人なら、テキストファイルの改行コードの違いに悩まされたことがあるでしょう。残念ながら、Windows標準搭載の「メモ帳」は、Windowsで使われる改行コードしか認識しません。そんなとき、PowerShellでさらりと一括変換できるとカッコイイですよ。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
UNIXは「LF(ラインフィード、0A)」、Macは「CR(キャリッジリターン、0D)」、そしてMS-DOSとWindowsは「CR+LF(0D 0A)」。これらの改行コードの違いは、古くからコンピュータに携わっている人なら常識でしょう。UNIXと同種に扱われることが多いLinuxはLFですし、BSD UNIXベースのOS XもLFです。LinuxカーネルのAndroidもLFです。CR+LFを使うのはWindowsだけになってしまいました。
これまで、改行コードの違いは、クロスプラットフォーム環境でなければ遭遇することはまずありませんでした。それが最近は状況がちょっと変わってきています。
例えば、最近、マイクロソフトはWindows向けのスクリプトやJSONファイル(アプリケーション開発やクラウドリソースのデプロイなどに使用するデータ記述言語ファイル)の配布に、「GitHub(ギットハブ)」を積極的に利用しています。
GitHubからダウンロードするテキストファイルの改行コードは、LFになるようです。Windowsは改行コードがLFであっても、スクリプトの実行に影響することはありません。しかし、スクリプトの内容を確認しようとWindows標準搭載の「メモ帳(Notepad.exe)」で開いてみると、改行コードを認識できずに表示が乱れてしまいます(画面1)。
UNIXやLinuxに手馴れた人なら、「sed」や「tr」「perl」などを使ったコマンドラインで、テキストファイルに含まれる任意の文字列を自在に変換できるはずです。LFをCR+LFに変換したり、CR+LFからCRを取り除いたりするのも、お手のものでしょう。
Windowsでの管理タスクやその他の作業を効率化する際には、筆者はずっと「Windows Script Host(WSH)」を好んで使っていました。VBScriptで記述できて、Windowsの管理インタフェースであるWMI(Windows Management Instrumentation)に簡単にアクセスできて、さらにほとんどのバージョンのWindowsでWSHのスクリプトエンジンを標準で利用できるからです。確か、Windows 95やWindows NT 4.0でも追加インストールすることで利用できたはずです。
自分でスクリプトを書くのが難しくても、WSH向けのサンプルスクリプトや汎用的なスクリプトはインターネット上で数多く公開されてきましたので、これを利用できました。例えば、テキストファイル内の文字列の置換に関しては、@ITの10年以上前の記事で紹介されていた「replace.wsf」が便利です。
この「replace.wsf」では、置換対象文字列としてLFを、置換文字列としてCR+LFに変換するという指定はできません。しかし、置換後の出力結果はCR+LFのテキストファイルになるので、ダミーの文字列を置換させる(実際には置換させない)ようにすればよいのです(画面2)。
Copyright © ITmedia, Inc. All Rights Reserved.