読者です 読者をやめる 読者になる 読者になる

49hack

見習いエンジニアが魔法使いになるまで

grep, xargs, sedを使って複数ファイルの文字列を一括で置換する

linux

例えば、カレントディレクトリ下のファイルで「置換前の文字列」が含まれるものを一括で「置換後の文字列」に置換したい場合は以下のようにします。

$ 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'

参考