shigechi-64's diary

自由・自主・自立・自尊

複数ファイルの中の特定の語句を一発で置換する

Rubyの便利なワンライナー

$ruby -i.bak -pe 'gsub "foo", "bar"' *.html *.php *.css

実行すると引数で指定されたファイル内の"foo"という文字列を全て"bar"に置換する。元ファイルは.bakをつけて保存される。
-iオプションは、引数で指定されたファイルの内容を置き換える(in-place edit)。元ファイルは拡張子をつけた形で保存される。拡張子がなければバックアップは行われず、破壊的な変更を行う。
-pオプションをつけると、プログラム全体が下記のようなブロックで囲まれたように動作する。また、各ループの最後に$_(組み込み変数。最後にgetsまたはreadlineで読み込んだ文字列を格納する)の値を出力する。

while gets
  #do something
end

-eオプションは、コマンドラインからファイル名によらずスクリプトを指定する。