色々な改行コード変換の方法

  • 84
    Like
  • 7
    Comment
More than 1 year has passed since last update.

改行コード変換のメモ

CRLFとLFだけ。さすがにCRだけのものはあまりないでしょう。

環境

  • CentOS release 6.5 (Final)

nkf

みんな大好きnkfコマンド。--helpでオプションを確認しましょう。

$ nkf --help 2>&1 | grep CRLF
d,c      Convert line breaks  -d: LF  -c: CRLF
-L[uwm]  line mode u:LF w:CRLF m:CR (DEFAULT noconversion)

unix -> dos は -Lw(win) で、dos -> unix は -Lu(unix) です。

$ file unix.txt dos.txt
unix.txt: ASCII text
dos.txt:  ASCII text, with CRLF line terminators

$ nkf -Lu dos.txt > dos2unix.txt
$ nkf -Lw unix.txt > unix2dos.txt

$ file dos2unix.txt unix2dos.txt
dos2unix.txt: ASCII text
unix2dos.txt: ASCII text, with CR line terminators

dos2unix, unix2dos

いかにも dosからunixに変換してくれるっぽいコマンドもあります。
これらのコマンドは、引数にファイルを指定すると、ファイルの改行を書き換えて保存してしまいます。便利ですが、パイプで渡してあげる方がUNIXの流儀っぽいです。

$ cat dos.txt  | dos2unix > dos2unix.txt
$ cat unix.txt | unix2dos > unix2dos.txt

perl, ruby

perlもrubyもワンライナーだとほとんど同じですよね。

$ perl -pe 's/\r//'     dos.txt  > dos2unix.txt
$ perl -pe 's/\n/\r\n/' unix.txt > unix2dos.txt
$ ruby -pe 'sub("\r", "")'     dos.txt  > dos2unix.txt
$ ruby -pe 'sub("\n", "\r\n")' unix.txt > unix2dos.txt

sed

環境によってはnkfもdos2unixもperlもrubyもインストールされていないかもしれません。でもsedはどのUNIXにも存在します。CRを削るだけなら超簡単です。

$ sed "s/\r//g" dos.txt > dos2unix.txt

\rと書くよりC-v C-m で制御コードを入れるほうがカッコイイので、私はこちらを多様することが多いです。

$ sed "s/^M//g"  dos.txt  > dos2unix.txt