ディレクトリの中を再帰的に全置換するには 2016/09/12
GNU sedがあれば、置換対象のファイルを grep でリストアップして、sedの -i オプションを使う。
$ grep -rl 置換前 . | xargs sed -i 's/置換前/置換後/g'
ファイルの拡張子などで条件を絞って全置換するには find を使う。
$ find . -name "*.txt" | xargs sed -i 's/置換前/置換後/g'
または
$ find . -name "*.txt" -exec sed -i 's/置換前/置換後/g' {} \;
findを使う方法は、findで見つけてきた全ファイルのタイムスタンプを、たとえそのファイルに置換文字列が含まれていなくも、変えてしまう。
置換時に元ファイルをリネームしてバックアップしておきたい場合は sed の -i オプションにsuffixを付ける。
$ grep -rl 置換前 . | xargs sed -i.bak 's/置換前/置換後/g'
カレントディレクトリの中にあるすべてのファイルのすべての行の先頭に // を追加する例
$ find . -type f -exec sed -i 's/^/\/\//g' {} \;