あるディレクトリにある全てのファイルの内容を置換する
d:id:d-kami:20100613を見て、それ別にRuby使わなくてもシェルで、しかも一行でできるよ、と思ったので書いておく。
原理はカンタン、対象となるファイルをfindでリストアップして、xargsで他のコマンドに渡すだけ。
sedコマンドは、"-i"オプションでファイルに対して破壊的な変更を行うことができる。なので、一度別のファイルにはき出して元のファイルを削除してリネーム、なんてことも必要ない。
$ find . -name '対象ファイルパターン' -print0 | xargs -0 sed -i '置換正規表現'
具体的には、こんな感じ。
$ cat dir1/hello.txt hello d_kami! bye, d_kami! $ cat third_dir/haro-.txt haro- d_kami! baibai d_kami... $ find . -name '*.txt' -print0 | xargs -0 sed -i 's/d_kami/yas/g' $ cat dir1/hello.txt hello yas! bye, yas! $ cat third_dir/haro-.txt haro- yas! baibai yas...
やはり、yaslinuxの基本コマンド群は偉大である。