Linuxでディレクトリ配下のファイル内容を一括置換する最も簡単な方法


しばしば忘れるので、自身の備忘録として…

ファイルの拡張子を指定しない場合

  • 対象の確認
$ find ./ -type f | xargs grep "foo"
  • 置換実行
$ find ./ -type f | xargs sed -i -e "s/foo/bar/g"
  • 置換後の確認
$ find ./ -type f | xargs grep "bar"

ファイルの拡張子を指定する場合

  • 対象の確認
$ find ./ -type f -name "*.php" | xargs grep "foo"
  • 置換実行
$ find ./ -type f -name "*.php" | xargs sed -i -e "s/foo/bar/g"
  • 置換後の確認
$ find ./ -type f -name "*.php" | xargs grep "bar"

sed のオプションについて

-i オプション

ファイルを直接上書きする。

これを付けないと、ディストリビューションによりバックアップファイルが自動作成されることがあります。
バックアップを明示的に指定する場合は -i.bak のように指定。

-e オプション

–expression=スクリプトコマンド のこと。
基本的には、 "s/foo/bar/g" や "s/foo/d" になります。

Fin ❤︎