Linuxのターミナルで作業しているとき、あるディレクトリ以下のファイルすべてについて一括置換したいなぁって思うときありますよね。
そのときのTips。
普通のやつ
find . -type f -print0 | xargs -0 sed -i -e 's/foo/bar/g'
Gitバージョン管理のリポジトリ
Linuxのとき
find を使うと .git ディレクトリも巻き込んでリポジトリをぶっ壊すので ls-files
を使います。
git ls-files -z | xargs -0 sed -i -e 's/foo/bar/g'
Macのとき
-i
オプションの後に空文字列をつけるのがポイント。じゃないとハマる。
git ls-files -z | xargs -0 sed -i '' -e 's/foo/bar/g'
また、 sed: RE error: illegal byte sequence
エラーが出た時の対処は以下のようにします。
export LANG=C