BashでファイルにCRLFが含まれているかを判断してLFに置換する


Bashで、テキストファイルの行末コードがCRLFになっているかを、なるべく短くてビルトインのコマンドで判断する・置換するコードです。

ファイルにCRLFが含まれているかを判断する

grep -U $'\r' winfile.txt

if文で処理を分ける場合

if grep -q -U $'\r' winfile.txt; then
  # CRLFである場合の処理
else
  # そうでない場合の処理
fi

行末のCRLFをLFに統一する

sed 's/'$'\r''$//' winfile.txt

置換した結果を別ファイルに吐き出す場合

sed 's/'$'\r''$//' winfile.txt > out.txt

直接ファイルを上書きする場合

sed -i 's/'$'\r''$//' winfile.txt

macOSなどBSD系だと、バックアップ拡張子が必要。

sed -i.bak -e 's/'$'\r''$//' winfile.txt