grep is generally the program to use for matching and printing lines.
sed is a more powerful program that allows you to modify the text as well, so it's really overkill here, but yes, it can also be used as a grep substitute.
Code:
grep 'string' infile > outfile
sed -n '/string/p' infile > outfile
Edit @ovenwolv. You're correct in general, but
useless use of cat. grep and sed can both read files directly.