経緯
環境でシェルスクリプトを実行した際にうまくいかず。先輩に相談したところただ改行コードが間違っていたためだと判明。悔しかったので、改行コードのエトセトラを備忘録として残すことにした。
改行コード_各OSの違い
どうやらOSによって基本とする改行コードは異なるらしい
以下関係を表にまとめる(表1)
改行コード | OS | 概要 |
---|---|---|
LF | UNIX系、macOS(X以降)、iOS、Android | Linuxもこれ |
CRLF | Windows | - |
CR | Mac OS 9以前 | 現在はメジャーでない |
改行コード_正規表現
それぞれの改行コードを正規表現で表すと次のように表せる
置換の際に必要な知識のため、これも表にまとめる(表2)
改行コード | 正規表現 |
---|---|
LF | \n |
CRLF | \r\n |
CR | \r |
改行コード_確認方法
改行コードは様々な方法で確認できる
環境によっていくつか種類があるため、用途に応じて使い分ける
1. メモ帳で確認(windows11で確認)
隣にはファイルの文字コードも確認できる
ただし、文字コードが混ざっている場合、メモ帳ではCRLF
が混じっている場合そちらに統一されてしまうようだ
注意
サクラエディタでは黄色枠=CRLFと赤色枠=LFの区別がつくが、メモ帳ではWindowsの基本となるCRLFのに統一されてしまっている。設定いじれば判別できるようになるのだろうか。。
2. サクラエディタで確認
サクラエディタでは目視で改行コードを確認可能。(素晴らしい!!)
さらにカーソルを置いた行の改行コードもそれぞれ識別して表示してくれる。
3. Linuxコマンドで確認
いくつかのコマンドで確認することもできる
画像は改行コードを混ぜた場合の表示例
3-1. od -c
コマンド
od -c test.txt
3-2. file
コマンド
file test.txt
3-3. nkf(Network Kanji Filter)
コマンド
nkf --guess test.txt
4.Vimで確認
vimエディタでは次のオプションを指定することで改行コードを確認できる
:set fileformat?
画像は改行コードを混ぜた場合の表示例
unix=LF , dos=CRLF , mac=CRである(なぜか自分の環境では確認できなかった)
注意
Vimはファイル全体を通して複数の改行形式が混在している場合
もっとも優先度の高い形式に基づいてfileformatを設定する
優先度:LF > CRLF > CR
ちなみに^M
はCRを含む改行形式(CRLF or CR)とLFを読み込むと表示される
CRLFかCRのみの場合は表示されない
ただしCRのみの場合は表示される(なんでや)
CRのみのファイルをvimで開く
なぜかfileformat=unixと表示される
この状態で保存するとdosになる(why?)
改行コード_変換方法
1. サクラエディタで変換
改行コード:CRLF
CRLF, LF, CRが混在している
- サクラエディタでは入力する改行コードの設定が変更できる
#設定 > 入力改行コード指定
#ショートカットキー: Shift+Ctrl+S
2. Linuxコマンドで変換
2-1.nkf(Network Kanji Filter)
コマンド
# 【入力ファイル】 を改行コード(LF)へ変換して上書きする
nkf -Lu --overwrite test.txt
オプション
-Lu : unix形式(LF)
-Lw : windows形式(CRLF)
-Lm : macintosh形式(CR)
2-2. iconv
コマンドとtr
コマンドの合わせ技
# 【入力ファイル】 の 【入力文字コード】 を 【出力文字コード】 に、
# 改行コードCRLFを改行コードLFへ変換して 【出力ファイル】 へ出力する
iconv -f 【入力文字コード】 -t 【出力文字コード】 【入力ファイル】 | tr -d '\r' > 【出力ファイル】
注意
入力ファイルと出力ファイル同じにすると空ファイルになるため注意
参考
https://auroralights.jp/entry/2021/04/03/233553
https://qiita.com/bezeklik/items/aca37ffb127821311d6b
https://qiita.com/r18j21/items/78d8501888839b13c770
https://sakura-editor.github.io/help/HLP000062.html
https://sakura-editor.github.io/help/HLP000362.html
https://sakura-editor.github.io/help/HLP000285.html
https://qiita.com/waoooon/items/8d982e49692c8145ca4b
https://qiita.com/hogeo1234/items/76a1873ed4ab327254b5
https://qiita.com/ymm1x/items/b383fec5802f38079162
https://wakaru-web.com/device/line-feed-code/
まとめ
改行コードの確認・変換についてはサクラエディタが便利