FooをBarにする場合、先にfoo->barをしてしまうと、Fooまでbarになってしまうので注意(FooはBarになって欲しいはず)
BSD (Mac)
BSDでは--in-place
がバックアップファイルの拡張子を受け取るので、バックアップファイルが要らない場合は''を指定する
git grep -l Foo | xargs sed -i '' -e 's/Foo/Bar/g'
git grep -l foo | xargs sed -i '' -e 's/foo/bar/g'
''を忘れると-e
というのが末尾に追加されたバックアップファイルが作成される(置換はちゃんと行われる。この動作はバグなんじゃないかと思うけど、よく分からない)
GNU
GNUのsed若干実装が違うため、''を渡す必要がない。
git grep -l Foo | xargs sed -i -e 's/Foo/Bar/g'
git grep -l foo | xargs sed -i -e 's/foo/bar/g'
逆に、バックアップファイルが欲しい場合(拡張子.bakをつける)
git grep -l Foo | xargs sed -i.bak -e 's/Foo/Bar/g'
git grep -l foo | xargs sed -i.bak -e 's/foo/bar/g'
iと.bakが連続している点に注意