再帰的にファイルに含む文字列を置換する

PHPでクラスの名前空間をする際に作成しました。

また使う機会がありそうなのでメモ。

$ find ./ -type f -exec grep -l '<置換したい文字列>' {} \; | xargs sed -i.bak -e 's:<置換したい文字列>:<置換する文字列>:g'

./ (現在のディレクトリ)以下のファイルで、'<置換したい文字列>’ という文字列を含んだファイルを列挙して、そのファイルに含まれる ‘<置換したい文字列> を ‘<置換する文字列>’ に置換するスクリプト。

sed の -i オプションで、拡張子 .bak と付けて変換前のファイルをバックアップします。バックアップが不要の場合、このオプションを削除します。

以下、具体例。

$ find ./ -type f -exec grep -l 'App\\Models\\Foo' {} \; | xargs sed -i.bak -e 's:App\\Models\\Foo:App\\Models:g'