ファイルの内容を書き換えるワンライナー

今日使ったのでメモ。カレントディレクトリ下のファイルで、「hoge」を含むファイル内の「hoge」を「fuga」に変更。
尚、svnでバージョン管理しているので、grepでは、svnファイルを除くように指定しています。

grep -rl account_separator . | grep -v svn |
xargs ruby -pi.bak -e '$_.gsub!(/hoge/,"fuga");'

解説

  • pオプション

このオプションにより、全体が以下のループで囲まれます。

while gets
 ...
end

このgetsの結果は、$_に格納されます。なので、各行に対してgsubを行っているというイメージです。

  • iオプション

引数で指定されたファイルの内容を置き換えることを指定します。元のファイルは拡張子をつけた形で保存されます。