テキスト文書の改行文字は3種類が使われている。
OS | 改行コード | 正規表現などでの記号 |
---|---|---|
unix | LF | \n |
Mac OS(主にMac OS X以前) | CR | \r |
Windows | CR+LF | \r\n |
最近はあまり気にしないでも問題ないことが多いが、古いシステムのシフトJISデータを扱うことがあって、きちんと精査しないとまずいかったのまとめておく。
テキストの生データを確認
odコマンドでキャラクタ表示にして確認するのが簡単。
$ od -c sample.csv | lv 0004060 e x \t R e g i s t D a t e T i m 0004100 e I D L i s t " \r \n 1 0 3 \t 212 224
改行文字の検索は、/(スラッシュ)を入力して検索モードに降りてから、\\バックスラッシュ2回(エスケープ)とnやrを入力すれば良い。
改行コードの一括変換
目的の改行コードに一括変換するにはnkfが確実だろう。
・LF(UNIX系)に変換 $ nkf -Lu sample.txt > output.txt ・CRLF(Windows系)に変換 $ nkf -Lw sample.txt > output.txt ・CR(旧Mac OS系)に変換 $ nkf -Lm sample.txt > output.txt
Perlで検索置換
基本的には\rと\nをそのまま使えば良いが、前方不一致や後方不一致の構文を入れて行う点がポイント。
$ perl -pe 's/(?<!\r)\n/\r\n/g' unix.txt > windows.txt
よく例でありがちな、's/\r/\r\n/g'のような安易な変換は危険なので注意。改行コードが混じったテキストがあったときや、変換元のコードの勘違い、変換の多重実行でなどの行為で、簡単にCRCRLFなどになって壊してしまう。