サイトアイコン IT NEWS

Linuxでファイルの改行コードLF⇔CRLFを変換する方法

linux-lf-crlf

前回、Linuxで文字コードがUTF-8のファイルに対して、BOM付き⇔BOMなしを変換する方法をご紹介しました。

最近ではあまり意識しなくなりましたが、UTFー8にはBOM(byte order mark)という厄介な存在があります。今回は、LinuxでこのBOMを付けたり外したりする方法をご紹介します。BOMとは?BOMを簡単に説明すると、そのファイルがUnicodeで符号化されているかどうかを、先...
UTF-8のBOM付きとBOMなしを変換する方法(Linux) - Minory
今回は、改行コードLFCRLF変換する方法をご紹介します!

3つの改行コード

面倒なことに、OSによって改行コードが異なります。

LF: UNIXやUnix系のシステム。Linux、AIX、Xenix、macOS、BeOS、Amiga、RISC OSなど。
CR+LF: CP/M、MP/M、MS-DOS、OS/2、Microsoft Windows。
CR: コモドールによるシステム、Apple IIファミリ、Mac OS(バージョン9まで)、OS-9。
改行コード – Wikipedia

普段からよく使う改行コードは、LinuxLFWindowCRLFです。
利用するシステムによっては、これらの改行コードの違いが邪魔して、動かなかったりします。
そこで、LFからCRLF、またはCRLFからLFに変換してみましょう。


改行コードを確認する

fileコマンドを使う

BOM編でもご紹介したfileコマンドを利用して確認できます。

file sample.txt

このように入力すると、CRLFの場合は以下のように表示されます。

sample.txt : UTF-8 Unicode (with BOM) text, with CRLF line terminators.

with CRLF line terminators」と表示されればCRLF、無ければLFということになります。

odコマンドを使う

以下のように実行すると、

od -c sample.txt

改行している箇所が「\nLF)」または「\r\nCRLF)」で表示されます。
詳しくは以下を参照。

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「od」コマンドです。
【 od 】コマンド――ファイルを8進数や16進数でダンプする - @IT

sedコマンドで一括置換

それでは、改行コードを確認したので変換していきます!
一般的には、nkfコマンドを利用して変換する情報が多いのですが、著者の環境ではnkfをインストールしておらず、代わりに文字列を置換する際によく使うsedコマンド変換します。

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。前回、前々回に続き、今回も「sed」コマンドの基礎編を解説します。
【 sed 】コマンド(基礎編その4)――文字列を置き換える/置換した行を出力する - @IT
sedコマンドの基本的な使い方は以下の通りです。
sed s/[置換対象文字列]/[置換後の文字列]/ [ファイル名]

LF ⇒ CRLF

まずは、LFCRLF変換する方法です。
以下のように、sedコマンド正規表現を使って変換します。

sed 's/$/\r/g' sample.txt > lf2crlf.txt

実行したら「lf2crlf.txt」ファイルに対して上記の確認コマンドを実行してみてください。

CRLF ⇒ LF

次は逆のCRLFをLFに変換する方法です。

sed 's/\r//g' sample.txt > crlf2lf.txt

当たり前ですが、正規表現の部分が違うので注意してください。

改行コードの種類 まず大前提としてOSや利用している環境によって、最近では大きく2つの改行を表す文字コードが存…
[Linux] 改行コードを変換する - ねこの足跡R

ハマったところ

sedの使い方をよく読んでなくて失敗した経験談です。
最初は指定した[ファイル名]をそのまま編集してくれると思ったのですが、置換した結果を表示するだけでした。
そこで、同じファイル名に出力したら上書きしてくれるのかと思いきや、空のファイルになってしまいました。
ですので、上記のサンプルでは後ろに別ファイル名で出力するようにしています。



モバイルバージョンを終了