指定ディレクトリ配下のテキストファイルを一括置換するコマンド

この前 GitHub のアカウント名を変更したので、各リポジトリ内のファイルに含まれる旧アカウントの文言を新アカウントに変更したくて調べた。

以下のようにすれば一気に置換できる。

$ grep -lr '置換対象の文字列' ./* | xargs sed -i.bak -e 's/置換対象の文字列/置換後の文字列/g'

例えば URL 文字列に含まれる「neos21github」を検索して「neos21」に変更する場合は以下のような感じ。

$ grep -lr 'neos21github' ./* | xargs sed -i.bak -e 's/neos21github/neos21/g'

grep コマンドに指定したオプションは以下のとおり。

-l オプションによってファイル名だけを列挙するので、それをパイプと xargs で受け取り、sed で置換する。

sed コマンドに指定したオプションは以下のとおり。

もし、sed コマンドで sed: RE error: illegal byte sequence といったエラーが出た時は、$ export LANG=C と打つと直る。

sed はちゃんと覚えなきゃな…。