改行コードを一括で置換する
投稿日:
定期的に使うのでメモ。
Linuxサーバー上で対象ディレクトリ配下のファイルの文字コードを一括で置換するコマンドです。
以下コマンドで現ディレクトリ配下にあるphpファイルに対してCRLF(\r\n)をLF(\n)に置換します。
sudo find . -name "*.php" -type f -exec sed -i -e "s/\r//g" {} \;
※sudoは必要に応じて。全対象ファイルの編集権限があるなら不要です。
一応解説
CRLFはWindows等でよく使われる改行コードで、LFやLinuxやUnix等でよく使われる改行コードです。
まず、findコマンドの構成は以下の通り。
find {検索対象ディレクトリ} -name {検索対象の名前} -type {検索対象のタイプ} -exec {検索対象に対して実施するコマンド}
-type f
でファイルを対象にしています。
-name "*.php"
でphpファイルを指定しているのでタイプは指定する必要が内容に思えますが、
やろうと思えばhoge.php
というディレクトリも作れない訳ではないので、念の為指定しています。
そして、-exec
オプションでsedコマンドを指定しています。
sedコマンドの構成は以下の通り。
sed -i -e "s/{置換対象の文字列}/{置換後の文字列}/g" 対象ファイル
CRLFをLFに置換すると言いましたが、このコマンドでは正確にはCR(\r)を消しているだけです。
なので、CRLFはLFになりますし、もしCRがあれば消滅します。
(古いMacintoshではCRを改行コードとして扱っていたらしい。とりあえず現在では消滅してくれて良い。)
findの-exec
で実行する場合、{}
に検索結果のファイル名が入ります。
そして実行したいコマンドの最後は\
で閉じます。