キーワードを含んだ複数ファイルの文字列を一括置換

ディレクトリ配下にあるファイルに記述されている文字列 hogebar に置換する場合。

find . -type f -print | xargs grep -l hoge | xargs sed -i "s/hoge/bar/g" ;

find、grep、sedを組み合わせて置換していきます。
それぞれコマンドの役割は下の感じ。

find . -type f -print

カレントディレクトリ内の相対パスを含むファイル名をリストアップ。

xargs grep -l hoge

hogeを含むファイルに絞り込む。
このコマンドは必要ないかも。 # ご指摘いただきましたが、タイムスタンプを変えたくない場合はこのコマンドを入れる。
でも、sedに流し込むファイル名は置換対象ファイルのみに絞りたかったので入れている。

xargs sed -i "s/hoge/bar/g"

hogebar に置換。

置換時にバックアップを取得したい場合は こちら の記事も参考になると思います。


Qiitaに投稿した記事です。