当サイトは広告およびアフィリエイトプログラムによる収益を得ています。
Linuxでテキストファイルの「^M(改行コード)」を置換する方法

Linuxでテキストファイルの「^M(改行コード)」を置換する方法

2024年2月23日
Blueskyロゴ Pocketロゴ  はてなブックマークロゴ

Windowsで作成したテキストファイルをUbuntuなどLinuxのviエディタなどで開くと、行の終わりに【^M】などと表示されることがあります。これはWindowsの改行コードによって文字化けしたような状態であり、コマンドで一斉置換することができます。

改行コードとは?

2行以上にわたる文章の場合に「行と行をわける制御文字」を改行コードと呼び、文字入力中にキーボードのEnterキーを押下することで入力され、画面上では次の行に移動します。

改行コードはOSによって異なる場合があり、Windowsは「CRLF」でUbuntuなどのLinuxは「LF」が採用されています。ちなみにMacでは古いバージョンでは「CR」でしたが、比較的に新しいバージョン(OS X以降)では「LF」が採用されています。

このため、Windowsのメモ帳などでテキストファイルを作成すると、各行の最後には見えない「CRLF」があり、これをLinuxで表示すると「LF」のみが改行コードとしてみなされ「CR」が文字として扱われることから、文字化け^M)した状態になります。

UbuntuなどのLinuxでは、改行コードを置換するnkfコマンドがあるので、これを使って一斉置換すると簡単です。

nkfコマンドの使い方

端末(ターミナル)で【nkf】を実行し「コマンド ‘nkf’ が見つかりません。」などと表示される場合にはインストールが必要です。

例えば、Ubuntuなどの場合には以下のコマンドでインストールできます。

sudo apt install nkf

改行コードを変換する

端末(ターミナル)より以下のコマンドを実行します。

nkf -d (ファイル名)

[-d]はオプションであり「改行コードをLFに変換する」を意味しています。他にも以下のようなオプションがあります。

オプション 改行コード 備考
-dまたは-Lu LF Linux系またはOS X以降のMac
-cまたは-Lw CRLF Windows
-Lm CR OS X未満のMac

ただし、これだとファイルの中身が端末(ターミナル)に表示されるだけなので、ファイルに保存する場合には以下のようにリダイレクトなどを使います。

nkf -d (ファイル名) > (新しいファイル名)

また、元のファイルに上書きしたい場合には以下のコマンドを実行します。

nkf -d --overwrite (ファイル名)

文字コードを変換する

nkfコマンドは改行コードだけでなく文字コードも変換することができます。

コマンドの使い方は改行コードの場合と同様であり、オプションで文字コードを指定します。

オプション 文字コード 備考
-jまたは–jis JISコード デフォルト
-eまたは–euc EUCコード
-sまたは–sjis シフトJISコード
-wまたは-w80 UTF-8コード BOMなし
-w8 UTF-8コード BOM有り

nkfコマンドの使い方は以上です。

私も大学生の頃に、自宅のWindowsで作成したテキストファイルを大学のUnixで表示し大量の「^M(改行コード)」に驚いた経験があります。当時はよくわからずに1つ1つを手動で消していましたが、nkfコマンドを教えてもらい感動しました。

昨今ではテキストエディタで保存時に[文字コード]や[改行コード]を指定することが多いのでnkfコマンドを使う機会は減りましたが、大量のファイルがある場合になどにはスクリプトで処理すると便利かもしれません。