Corredor

ウェブ、プログラミングの勉強メモ。

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

sed & awkプログラミング 改訂版 (A nutshell handbook)

sed & awkプログラミング 改訂版 (A nutshell handbook)

sed & awk デスクトップリファレンス

sed & awk デスクトップリファレンス

この前 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 : パターンを含むファイル名のみ返す (ちなみに -L ならパターンを含まないファイル名のみを返す)
  • -r : サブディレクトリも対象にする
  • -i を付けていないので、大文字小文字を区別していることに注意

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

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

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

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