前回、Linuxで文字コードがUTF-8のファイルに対して、BOM付き⇔BOMなしを変換する方法をご紹介しました。
今回は、改行コードのLF⇔CRLFを変換する方法をご紹介します!
3つの改行コード
面倒なことに、OSによって改行コードが異なります。
LF: UNIXやUnix系のシステム。Linux、AIX、Xenix、macOS、BeOS、Amiga、RISC OSなど。
改行コード – Wikipedia
CR+LF: CP/M、MP/M、MS-DOS、OS/2、Microsoft Windows。
CR: コモドールによるシステム、Apple IIファミリ、Mac OS(バージョン9まで)、OS-9。
普段からよく使う改行コードは、LinuxのLFとWindowのCRLFです。
利用するシステムによっては、これらの改行コードの違いが邪魔して、動かなかったりします。
そこで、LFからCRLF、またはCRLFからLFに変換してみましょう。
改行コードを確認する
fileコマンドを使う
BOM編でもご紹介したLinuxのfile
コマンドを利用して改行コードを確認できます。
1 |
file sample.txt |
このように入力すると、CRLFの場合は以下のように表示されます。
1 |
sample.txt : UTF-8 Unicode (with BOM) text, with CRLF line terminators. |
「with CRLF line terminators」と表示されればCRLF、無ければLFということになります。
odコマンドを使う
以下のように実行すると、
1 |
od -c sample.txt |
改行している箇所が「n
(LF)」または「rn
(CRLF)」で表示されます。
詳しくは以下を参照。
改行コードを一括変換
それでは、改行コードを確認したので変換していきます!
一般的には、nkf
コマンドを利用して変換する情報が多いのですが、著者の環境ではnkf
をインストールしておらず、代わりに文字列を置換する際によく使うsed
コマンドで変換します。
sed
コマンドの基本的な使い方は以下の通りです。
1 |
sed s/[置換対象文字列]/[置換後の文字列]/ [ファイル名] |
LF ⇒ CRLF
まずは、改行コードのLFをCRLFに変換する方法です。
以下のように、sed
コマンドと正規表現を使って変換します。
1 |
sed 's/$/r/g' sample.txt > lf2crlf.txt |
実行したら「lf2crlf.txt」ファイルに対して上記の確認コマンドを実行してみてください。
CRLF ⇒ LF
次は逆のCRLFをLFに変換する方法です。
1 |
sed 's/r//g' sample.txt > crlf2lf.txt |
当たり前ですが、正規表現の部分が違うので注意してください。
ハマったところ
sed
の使い方をよく読んでなくて失敗した経験談です。
最初は指定した[ファイル名]をそのまま編集してくれると思ったのですが、変換した結果を表示するだけでした。
そこで、同じファイル名に出力したら上書きしてくれるのかと思いきや、空のファイルになってしまいました。
ですので、上記のサンプルでは後ろに別ファイル名で出力するようにしています。
コメント