Substitute a text only in files where it appears

2014-12-03

For example, to substitute foo with bar

for f in `grep -lR foo`; do
	echo -n ">> $f";
	sed 's/foo/bar/g' $f > $f.tmp ;
	mv $f.tmp $f ;
	echo " done.";
done
    1. for loops on all files containing the text “foo”, grep -l only show the file name with corresponding text inside.
    1. sed replace foo with bar in all file
    1. mv save the modification (delete if you don’t want to overwrite the original files, the modified files is named with .tmp at the end)
    1. & 5) echo: which file is treated