改行コードについて
はじめに
先輩が改行コードの問題によりファイルが存在しているにも関わらずファイルが存在しないとエラーが返されていたため備忘録として記載する。
何が原因だったのか?
原因としてはLinuxでは改行コードLFを使用しなければならないが、Windowsで使用されている改行コードCR+LFを使用したことが原因だった。
なぜ起こったのか?
なぜこのようなことが起こったのかというと以下のような手順により起こったと思われる。
1.作業で使用するファイルを編集する
2.他のサーバーのコードをメモ帳(Windows)にコピー
3.編集していたファイル上記コードを貼り付け
2の作業により、改行コードがLFだったがメモ帳にコピーしたことにより改行コードがCR+LFに変わってしまったと予想している。
改行コードの種類
改行コードの種類は以下。
○LF(Line Feed:ラインフィード)
・英語で改行を意味する。カーソルを新しい行に移動する
・UNIX系、Linux、MacOS(MacOSX以降)で採用
○CR(Carriage Return:キャリッジリターン)
・英語で復帰を意味する。カーソルを左端の位置に戻す
・MacOSで採用
○CR+LF
・CRとLFを合体させたもの。左端にカーソルを戻して改行する
・Windowsで採用
改行コードの変更方法
○nkfコマンドを使用する
nkfコマンドとはNetwork Kanji Filterの略で、LinuxとWindowsなどの異なるOS間でテキストデータを交換する際に文字コードと改行コードを変換するために使用するコマンド。
・$ nkf -Lu ファイル名
-Luオプションにより改行をLFにする。-dでも可
・$ nkf -Lw ファイル名
-Lwオプションにより改行をCRLFにする。-cでも可
・$ nkf -Lm ファイル名
-Lmオプションにより改行をCRにする
○sedコマンドを使用する
sedコマンドとはStream EDitorの略で、指定したファイルをコマンドに従って処理し、標準出力へ出力するコマンド。
・$ sed 's/\r//' ファイル名
CRLFからLFに変更する
・$ sed 's/$/\f/' ファイル名
LFからCRLFに変更する
○vimコマンドを使用する
それぞれの改行コードを正規表現で表すとLF=\n、CR=\n、CR+LF=\r\nとなる。
変換するには「:%s/置換前文字/置換後文字/g」をしようする。
/gで全ての行に対して置換する。
・補足
以下を実行するとファイルの改行コードを確認できる
:set fileformat?
または
:set ff?
改行コードを可視化するには以下を実行する
:se list
参考にさせていただいたサイト
https://www.atmarkit.co.jp/ait/articles/1609/29/news016.html
https://qiita.com/bezeklik/items/aca37ffb127821311d6b
http://www-creators.com/archives/2551