検索
連載

PowerShellのちょっとしたTips――改行コードを一括変換する山市良のうぃんどうず日記(65)(1/2 ページ)

WindowsとWindows以外のクロスプラットフォーム環境で作業したことがある人なら、テキストファイルの改行コードの違いに悩まされたことがあるでしょう。残念ながら、Windows標準搭載の「メモ帳」は、Windowsで使われる改行コードしか認識しません。そんなとき、PowerShellでさらりと一括変換できるとカッコイイですよ。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「山市良のうぃんどうず日記」のインデックス

連載目次

改行コードに関するWindowsユーザーの古くからの悩みとは?

 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)。

画面1
画面1 GitHubからダウンロードしたWindows PowerShellスクリプトをメモ帳で開くと、改行コードを認識できずに表示が大きく乱れる。スクリプトの実行には影響しないのだが、なんだか気持ちが悪い

WSHで文字列を置換できるが、コードを書くのは面倒……

 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)。

画面2
画面2 筆者の場合、PowerShellが主流になる前は、WSHを使って文字列の置換を行う方法を利用していた

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る