Linuxで改行コードを確認/変更する

同僚からもらったテキストファイルの改行コードがWindowsの\r\nだったせいで、解析用のシェルスクリプトが上手く回らなかったので、改行コードの確認と変更方法のメモです。

OS毎の改行コード

WindowsとLinux、OS Xの改行コードは

OS改行コード
Windows\r\n
Linux (Unix)\n
OS X\n

となっています。

改行コードの確認

まずは改行コードの確認をします。確認にはodコマンドを使用します。デフォルトではodは8進数でファイル内容をダンプしますが、cオプションを付けることでASCIIコードとしてダンプされるので、改行コードが目に見えるようになります。

# 実際のファイルの中身
$ cat hoge.txt
hoge
fuga
piyo

# ASCIIコードでダンプ
$ od -c hoge.txt
0000000   h   o   g   e  \r  \n   f   u   g   a  \r  \n   p   i   y   o
0000020  \r  \n  \r  \n
0000024

はい、改行コードが\r\nなのが確認できました。これを\nに変換します。

改行コードの変更

改行コードの変換にはdos2unixコマンドを使用します。コマンドが見つからない場合はaptyumでインストールしてください。

# Debian/Ubuntu系のLinuxの場合
$ sudo apt install dos2unix

# CentOS系のLinuxの場合
$ sudo yum install dos2unix

いよいよdos2unixコマンドで改行コードを変換します。使い方は簡単で、変換したいファイル名を指定するだけです。ファイルは上書きされるので注意してください。

# Windowsの改行コードをLinuxの改行コードへ変換。元のファイルに上書きされる
$ dos2unix hoge.txt

# 改行コードを確認。\nになっていることが確認できる
$ od -c hoge.txt
0000000   h   o   g   e  \n   f   u   g   a  \n   p   i   y   o  \n  \n
0000020

これでWindowsの改行コードをLinuxの改行コードに変換することができました。

ちなみに、反対にLinuxの改行コードからWindowsの改行コードへの変換はunix2dosコマンドを使えばできます。

# Linuxの改行コードをWindowsの改行コードへ変換
$ unix2dos hoge.txt

# 改行コードを確認。\r\nになっていることを確認できる
$ od -c hoge.txt
0000000   h   o   g   e  \r  \n   f   u   g   a  \r  \n   p   i   y   o
0000020  \r  \n  \r  \n
0000024

コメント