grep, xargs, sedを使って複数ファイルの文字列を一括で置換する
例えば、カレントディレクトリ下のファイルで「置換前の文字列」が含まれるものを一括で「置換後の文字列」に置換したい場合は以下のようにします。
$ grep -rl '置換前の文字列' ./ | xargs sed -i '.bk' 's/置換前の文字列/置換後の文字列/g'
i
オプションでファイルを直接書き換えます。
第1引数にはバックアップファイル名に使用する文字を入れます。上記の場合は、対象ファイル名.bk
が作成されます。
第1引数がない場合、sed: 1: "app/views/hoge/fug ...": command a expects \ followed by text
と怒られて動きません。
まあ、gitで管理してる場合はdiffで見れるので空文字でOKです。
$ grep -rl '置換前の文字列' ./ | xargs sed -i '' 's/置換前の文字列/置換後の文字列/g'