I usually use a combination of 'find', 'xargs' and 'perl -i.bak -pe' to do this. For example, change all the p's to q's in a tree of HTML documents starting in /htdocs and creating backups to .bak files:
$ find /htdocs -name '*.html' | xargs perl -i.bak -pe 's(p)(q)g'
Shazam!
-sam