しょんぼり技術メモ

まいにちがしょんぼり

あるディレクトリにある全てのファイルの内容を置換する

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の基本コマンド群は偉大である。