I always kept a small Python script around for searching and replacing in Linux. Turns out that GNU sed has an inline edit mode which I didn't know about:
-i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied)
This makes searching and replacing in files as simple as:
find . -name "*.txt" -print0 | xargs -0 sed -i "s/foo/bar/"
This replaces all occurences of "foo" with "bar" in all the .txt files in or below the current directory.
Unfortunately, -i appears to be a GNU extension, so it won't work on *BSD or Solaris, probably.