テキストファイルの改行コード変換方法について

nkfコマンドを使った変換

nkfコマンドで改行コードの変換ができます。

インストール

nkfコマンドが無い場合は、yumなどでインストールする必要があります。 CentOSなどのRedHat系では以下のようにインストールします。

$ sudo yum install nkf

変換方法

nkfのオプション"-L"で新しい改行コードを指定すれば、ファイルの改行コード変換ができます。

オプション"-L"に指定できるパラメータは以下のようになります。

オプションLで指定する文字 改行コード 16進コード OS
u LF 0x0a Unix
w CRLF 0x0d,0x0a Windows
m CR 0x0d Mac

元になるファイルはそのままで、改行コードを変換した結果を別ファイルとして保存したい場合は、以下のようなコマンドになります。

nkf -L[新しい改行コード] [変換元ファイル] > [変換先ファイル]

Linux上で作成した以下のようなテキストファイルを用意します。 このファイルを使って改行コードを変換してみます。

$ hexdump -C abcd.txt 
00000000  31 32 33 34 35 36 37 38  39 30 31 32 33 34 35 36  |1234567890123456|
00000010  0a 61 62 63 64 20 65 66  67 68 0a 41 42 43 44 20  |.abcd efgh.ABCD |
00000020  45 46 47 48 0a                                    |EFGH.|
00000025
改行コードはLF(0x0a)になっています。

CRLF(Windows)に変換

Windowsで使用されているCRLFに変換する場合は、以下のようにオプション"-Lw"を指定します。

$ nkf -Lw abcd.txt > abcd_crlf.txt
CRLFに変換したファイルを確認すると、改行コードはCRLF(0x0d, 0x0a)になっています。
$ hexdump -C abcd_cflf.txt 
00000000  31 32 33 34 35 36 37 38  39 30 31 32 33 34 35 36  |1234567890123456|
00000010  0d 0a 61 62 63 64 20 65  66 67 68 0d 0a 41 42 43  |..abcd efgh..ABC|
00000020  44 20 45 46 47 48 0d 0a                           |D EFGH..|
00000028

CR(Mac)に変換

Macで使用されているCRに変換する場合は、以下のようにオプション"-Lm"を指定します。

$ nkf -Lw abcd.txt > abcd_crlf.txt
CRに変換したファイルを確認すると、改行コードはCR(0x0d)になっています。
]$ hexdump -C abcd_cr.txt 
00000000  31 32 33 34 35 36 37 38  39 30 31 32 33 34 35 36  |1234567890123456|
00000010  0d 61 62 63 64 20 65 66  67 68 0d 41 42 43 44 20  |.abcd efgh.ABCD |
00000020  45 46 47 48 0d                                    |EFGH.|
00000025

LF(Unix)に変換

Unixで使用されているLFに変換する場合は、以下のようにオプション"-Lu"を指定します。

$ nkf -Lu abcd_cr.txt > abcd_lf.txt
LFに変換したファイルを確認すると、改行コードはLF(0x0a)になっています。
$ hexdump -C abcd_lf.txt
00000000  31 32 33 34 35 36 37 38  39 30 31 32 33 34 35 36  |1234567890123456|
00000010  0a 61 62 63 64 20 65 66  67 68 0a 41 42 43 44 20  |.abcd efgh.ABCD |
00000020  45 46 47 48 0a                                    |EFGH.|
00000025

上書きで変換

指定したファイルの改行コード変換して、そのまま上書きする場合は、オプション"--overwrite"を指定します。

nkf --overwrite -L[新しい改行コード] [変換元ファイル]

改行コードLFのファイルを改行コードCRLFに変する例

$ nkf --overwrite -Lw abcd.txt

複数ファイルの一括変換

nkf, find, xargsの3つのコマンドを組み合わせると、複数ファイルの改行コードを一度に変換できます。 組み合わせ例としては、以下のように指定する方法があります。

find [ディレクトリ] -name [ファイル名指定] | xargs nkf --overwrite -L[新しい改行コード]

tmpディレクトリ以下に存在する、ファイル名が"*.txt"(拡張子がtxt)の全ファイルの改行コードを、CRLFに変換する場合

find tmp -name "*.txt" | xargs nkf --overwrite -Lw

sedコマンドを使った変換

sedコマンドの置換で、改行コードの変換が可能です。

CRLFをLFに変換

CRLFをLFに変換して新しいファイルを作成する場合は、以下のように実行します。 "^M"の箇所はCRになり、「Ctrl + V」, 「Ctrl + M」で入力します。 この例では、CRLFからCRを置換で削除して、CRLF -> LFの変換を行っています。

$ sed -e 's/^M//g' abcd_crlf.txt > abcd_lf.txt

CRLFをLFに変換して上書きする場合は、以下のように実行します。

$ sed -i -e 's/^M//g' abcd_crlf.txt

複数ファイルの一括変換

sed, find, xargsの3つのコマンドを組み合わせると、複数ファイルの改行コードを一度に変換できます。 組み合わせ例としては、以下のように指定する方法があります。

find [ディレクトリ] -name [ファイル名指定] | xargs sed -i -e [置換指定]

tmpディレクトリ以下に存在する、ファイル名が"*.txt"(拡張子がtxt)の全ファイルの改行コードCRLFを、LFに変換する場合

find tmp -name "*.txt" | xargs sed -i -e 's/^M//g