概要
MacとWindowsの両方でコードを書いているときに、Windows側で改行コードがCRLFであることによるエラーが起きてしまうため、全ファイルの改行コードをLFにする必要があった。
最初はファイルは少ししかなかったがファイルが増えてきたのでさすがにめんどくさくなって一撃で置換できるようにした。
利用者に求めること
Windows on bash を使えるようにしておく。
コマンド
LRに置換したいディレクトリで以下を実行する。
find . -type f -print0 | xargs -0 sed -i 's/\r//g'
コマンドの説明
find
コマンドで現在のディレクトリを再帰的に走査する。
-type f
ではファイルのみ、 -print0
は走査した結果をnull文字区切りにして返却するという指定。
xargs
コマンドでは -0
( --null
でも可)を指定することでパイプで渡された文字をnull文字で区切って sed
コマンドに渡す。
sed
コマンドの -i
( --in-place
でも可)ではファイルを直接変するオプション。s/\r//g
については以下とのこと。ちなみにsedコマンドでは\nという文字を正規表現で拾うことができないらしいので、s/\r\n/\n/g
とはならないことに注意。
「s」コマンドは、デフォルトでは1行の処理で最初に見つけたパターンを置き換えたら終了します。各行に含まれる全てのパターンを置き換えたい場合は、「s」コマンドに「g」オプションを付けて実行します。
@IT【 sed 】コマンド(基礎編その4)
参考
https://stackoverflow.com/questions/3891076/how-to-convert-windows-end-of-line-in-unix-end-of-line-cr-lf-to-lf
https://qiita.com/wnoguchi/items/1b5d18118728b62e50fb
http://x68000.q-e-d.net/~68user/unix/pickup?find
http://www.atmarkit.co.jp/ait/articles/1801/19/news014.html
http://www.atmarkit.co.jp/ait/articles/1610/17/news015.html