grepでの再帰検索と置換について


grepコマンドでディレクトリを再帰的に検索するには、

grep -r [keyword] *

ですが、拡張子を指定したい場合に、

grep -r [keyword] *.html

はダメなんですよね(泣)


というわけで、ブログの情報を探し回ってみると、

find . -name '*.html' | xargs grep -i [keyword]

とか

grep -i [keyword] $(find . -name '*.html')

とやると上手くできました。


さらに、検索結果を置換もしたい場合もあるでしょう。

foo が含まれるファイルを bar に変換するには、sedコマンドを組み合わせて、

for FILE in `find . -name '*.html' | xargs grep -l -i foo`; do cp ${FILE} ${FILE}.work; sed -e "s/foo/bar/g" ${FILE}.work > ${FILE}; \rm ${FILE}.work; done

とやるとできます。