指定のディレクトリ以下の検索した文字列を全て置換する

コマンドを利用した置換方法を毎回忘れるのでメモ

環境はOSX。ただしデフォルトのsedはBSD由来のsedなのでhomebrewなどでgnu-sedをインストールしておきます。

単純にファイル内の文字列を検索するときは以下のようにしています。[1]

# カレントディレクトリ以下のファイルを検索
find . -type f -print0 | xargs -0 grep "検索文字"

上記でヒットした文字をそのまま置換したい場合は以下のようにします。

カレントディレクトリ以下の 検索文字置換文字 に置換します。[1]

# カレントディレクトリ以下を検索して置換
find . -type f -print0 | xargs -0 sed -i -e 's/検索文字/置換文字/g'

脚注

[1](1, 2) 上記-print0を指定しているのはスペースを含むファイル名対策です