LoginSignup
128
135

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-05-22

改行コード変換のメモ

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
128
135
7

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
  3. You can use dark theme
What you can do with signing up
128
135