特定のディレクトリ以下のファイルを対象に文字列置換
railsアプリ内のある文字列を一気に置換したかったので、アプリのルートディレクトリで次のコマンドを実行しました。
$ grep -lr str_before ./ | grep -v '\.log' | xargs sed -i 's/str_before/str_after/g' # 置換前の文字列を含むファイルをすべて表示 # うち、置換不要なログファイル等を除外 # 残りのファイルについて置換を実行 # 追記:2010/03/01 # str_beforeを二度書くのは面倒なので、変数にあてます。 $ str=str_before; grep -lr $str ./ | grep -v '\.log' | xargs sed -i 's/'$str'/str_after/g' # なお、railsアプリであれば、rak という便利gemを使ってこう書けます。 $ str=str_before; rak -l $str | xargs sed -i 's/'$str'/str_after/g'
- xargs
標準入力から複数の引数を読み込み、指定のコマンドを実行
- sed
文字列の置換- -i ::直接ファイルの内容を置換