search
LoginSignup
136

More than 5 years have passed since last update.

posted at

updated at

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

改行コード変換のメモ

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
136