ack is a pretty great improvement over grep for programmers. It ignores .git/.svn directories and is language-aware.
By default, it recurses through the current directory, looking at all source code files for a match to the input string. It dutifully reports line numbers and filenames with highlighting.
metaswitch cchamblin$ ack "class BusinessGroup"
api/bigrivertelephone/com/BigRiverTelephone/Metaswitch/BusinessGroup.java
13:public class BusinessGroup extends MetaswitchElement implements WalkableElement{
api/bigrivertelephone/com/BigRiverTelephone/Metaswitch/BusinessGroupLine.java
9:public class BusinessGroupLine extends SubscriberLine{
api/bigrivertelephone/com/BigRiverTelephone/Metaswitch/BusinessGroupLineCallerIDServices.java
9:public class BusinessGroupLineCallerIDServices extends CallerIDServices{
api/bigrivertelephone/com/BigRiverTelephone/Metaswitch/BusinessGroupLineCallForwardingServices.java
11:public class BusinessGroupLineCallForwardingServices extends CallForwardingServices{
api/bigrivertelephone/com/BigRiverTelephone/Metaswitch/BusinessGroupLineFindMeFollowMeRule.java
9:public class BusinessGroupLineFindMeFollowMeRule extends FindMeFollowMeRule{
Installation is available via Homebrew and MacPorts as well as most mainstream package managers, or you can just curl it.
brew install ack