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

» 2016年05月16日 05時00分 公開
[山市良テクニカルライター]
前のページへ 1|2       

今は、PowerShellがあるじゃないか!

 Windows 7およびWindows Server 2008 R2以降は、スクリプティング環境として「Windows PowerShell」も標準で利用できるようになりました。

 Windows PowerShellを使えば、UNIXやLinuxユーザーがsedやtr、perlを使いこなすのと同じように、簡単なコマンドラインでテキストファイルの文字列を置換できます。例えば、テキストファイルの改行コードをCR+LFに一括置換するには、Windows PowerShellで次のコマンドラインを実行します(画面3)。

$targetpath = "ファイルのパス"
(Get-Content $targetpath) -Join "`r`n" | Set-Content $targetpath
画面3 画面3 テキストファイルの改行コードLFを、WindowsのCR+LFに一括変換する例

 このコマンドラインでは「Get-Content」コマンドレット(gc、cat、typeの省略形も使用可)でテキストファイルを文字列配列に読み込み、文字列配列(配列の各要素はテキストファイルの各行)をCR+LF(`r`n)で結合して、その結果を同じファイルパスに書き出しています。ファイルのパスを2行目のコマンドラインに直接記述すれば、1行だけで変換できるようになります。

 反対に、CR+LFの改行コードをLFに変換するには、次のコマンドラインを実行します(画面4)。

(Get-Content $targetpath) -Join "`n" | Set-Content $targetpath
画面4 画面4 テキストファイルの改行コードCR+LFを、UNIXやLinux、Mac向けにLFに一括変換する例

 テキストファイルの改行コードの変換は、次のように記述することもできます。

(Get-Content $targetpath -raw).Replace("`n","`r`n")|Set-Content $targetpath

 これは、改行コードを含む全てを読み込み、LF(`n)をCR+LF(`r`n)に置換して、その結果を同じファイルパスに書き出します。この方法を知っていれば、改行コード以外の任意の文字列の置換にも応用することができます。

 ただし、この方法で改行コードを置換する場合は、置換前のテキストファイルの改行コードが既にCR+LFであると、CR+CR+LFに置換されてしまうことに注意してください。次のように、LFからCR+LFへの置換した後に、CR+CRをCRに置換すると確実です。

(Get-Content $targetpath -raw).Replace("`n","`r`n")|Set-Content $targetpath
(Get-Content $targetpath -raw).Replace("`r`r","`r")|Set-Content $targetpath

 実は、テキストファイルの改行コードをCR+LFに変換するだけなら、もっと簡単な方法があります。Get-Contentコマンドレットの標準出力への出力結果を、別のファイルにリダイレクトしてあげれば、それだけで変換できるのです(画面5)。

画面5 画面5 「Get-Content(cat、gc、typeでもOK) ファイル名 > ファイル名」で改行コードを置換することもできる

Compare-Objectはdiffの代用になる

 UNIXやLinuxでは、ファイル内容の比較に「diff」コマンドを使えますが、Windows PowerShellでもdiffを使うことができます。とはいっても、Windows PowerShellのdiffは、Compare-Objectの省略形です。次のようなコマンドラインを実行すれば、2つのテキストファイルの内容の違いを比較することができます。

Compare-Object (Get-Content "ファイル1のパス") (Get-Content "ファイル2のパス")

または

diff (Get-Content "ファイル1のパス") (Get-Content "ファイル2のパス")

早くメモ帳がLFに対応してくれないかなぁ……

 メモ帳はCR+LFしか改行コードとして扱ってくれませんが、Windows向けのテキストエディタやツールにはLFを改行コードとして扱ってくれるものがたくさんあります。例えば、Windowsに付属する「Windows PowerShell ISE」もその1つです。

 素早く起動できるメモ帳は、UNIXやLinuxにおける「vi」や「vim」のような存在です。メモ帳が改行コードLFにも対応してくれるとうれしいのですが、Windowsのバージョンによってメモ帳の機能が違うというのもよろしくないと思います。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。