🔎
【Linux】ファイルの改行コードがLFではなくCRLFの場合の対処方法
0. はじめに
先日、改行コードのミスによって、プログラムが要求通りに動かないことがありました。
恥ずかしながら、これまで改行コードを意識したことが無かったため、備忘録としてまとめました。
対処方法だけ確認したい方は、目次から以下の場所に飛んでください。
-
- 【本題】ファイルの改行コードをCRLFからLFにするには
1. 前提:改行コードの違い
OSごとの基本改行コード
(参考:https://wakaru-web.com/device/line-feed-code/)
Linuxの場合、改行コードはLFである必要があるということです。
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」が無くなっていることから、置き換えに成功したことが分かります。
Linuxで作業している際、改行コードがLFではなくCRLFの場合は、この方法で対処しましょう。
Discussion