🔎

【Linux】ファイルの改行コードがLFではなくCRLFの場合の対処方法

2023/11/23に公開

0. はじめに

先日、改行コードのミスによって、プログラムが要求通りに動かないことがありました。
恥ずかしながら、これまで改行コードを意識したことが無かったため、備忘録としてまとめました。

対処方法だけ確認したい方は、目次から以下の場所に飛んでください。

    1. 【本題】ファイルの改行コードをCRLF→LFにするには

1. 前提:改行コードの違い

OSごとの基本改行コード

(参考:https://wakaru-web.com/device/line-feed-code/)

2. 改行コードによる違いをfileコマンドで確認してみる

改行コードがCRLF、LFのテキストファイルを用意しました。

[root@db_ora ~]# ls -l
total 8
-rwxr-xr-x. 1 root root 11 Nov 23  2023 test_CRLF.sh
-rwxr-xr-x. 1 root root 11 Nov 23  2023 test_LF.sh

fileコマンドで、ファイルの種類を確認します。

CRLFのファイルの場合

[root@db_ora ~]# file test_CRLF.sh
test_CRLF.sh: ASCII text, with CRLF line terminators

「with CRLF line terminators」と表示されていますね。

LFのファイルの場合

[root@db_ora ~]# file test_LF.sh
test_LF.sh: ASCII text

これらの結果から分かるのは、CRLFであれば「with CRLF line terminators」が表示され、その表示が無ければLFということです。

3. 【本題】ファイルの改行コードをCRLF→LFにするには

sedコマンドを以下の構文で実行します。

何をしているかというと、CRLFの改行コードから「\r」を消すことで、「\n」にしています。

先程のCRLFのファイルに対して上記のコマンドを実行してみて、実行前後を比較します。

###実行前
[root@db_ora ~]# file test_CRLF.sh
test_CRLF.sh: ASCII text, with CRLF line terminators

###改行コードを置き換える
[root@db_ora ~]# sed -i 's/\r//' test_CRLF.sh

###実行後
[root@db_ora ~]# file test_CRLF.sh
test_CRLF.sh: ASCII text

実行前では出力されていた「with CRLF line terminators」が無くなっていることから、置き換えに成功したことが分かります。

改行コードがLFではなくCRLFの場合は、この方法で対処しましょう。

Discussion