1. nkfコマンドを使った変換
  2. sedコマンドを使った変換

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

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
    CRLFに変換したファイルを以下のように確認すると、改行コードはCRLF(0x0d, 0x0a)になっています。
    ]$ 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