602 文字
3 分
Linuxで改行コードを確認/変更する
2018-12-23
2024-10-01

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

OS毎の改行コード#

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

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

となっています。

改行コードの確認#

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

Terminal window
# 実際のファイルの中身
$ 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でインストールしてください。

Terminal window
# Debian/Ubuntu系のLinuxの場合
$ sudo apt install dos2unix
# CentOS系のLinuxの場合
$ sudo yum install dos2unix

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

Terminal window
# 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コマンドを使えばできます。

Terminal window
# 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