【Ruby】複数ファイルの内容を、ワンライナーで一括置換
いっつも忘れるのでメモ。
以下の簡単な例では、特定ディレクトリ以下の全ての txt ファイルを対象に、”foo” または “bar” という文字列に “baz” をくっつけます。こういう用途では Perl が王道ですが、Ruby好きとしてはこっちを使いたいですよね。
find . -name *.txt | xargs ruby -i -p -e '$_.gsub! %r{(foo|bar)}, %q{\1baz}'
-i -p -e などRubyの起動オプションの詳細については、下記の参考サイトをご覧ください。
Mac OSX 環境での注意点
ちなみにMac OSX 環境ではファイル名・ディレクトリ名にスペースが入るので、find -print0 と xargs -0 の組み合わせで find コマンドの出力をNULL文字区切りにするのがセオリーだそうです。
find . -name *.txt -print0 | xargs -0 ruby -i -p -e '$_.gsub! %r{(foo|bar)}, %q{\1baz}'
No comments
Jump to comment form | comments rss [?] | trackback uri [?]