OP asked for `grep`, and that is what **I RECOMMEND**; but after trying hard to solve a problem with `sed`, for the record, here is a simple solution with it:

 sed $'s/main/\E[31m&\E[0m/g' testt.c

or

 cat testt.c | sed $'s/main/\E[31m&\E[0m/g'

Will paint `main` in red.

* `\E[31m` : red color start sequence
* `\E[0m` : finished color mark
* `&` : the matched pattern
* `/g` : all words in a line, not just the first
* `$'string'` is bash strings with escaped characters interpreted

---

Regarding **grep**, it also works using `^` (begin of line) instead of `$` (end of line). Example:

 egrep "^|main" testt.c

And just to show this crazy alias that **I DO NOT RECOMMEND**, you can even let the open quotes:

 alias h='egrep -e"^|'
 h main" testt.c
 cat testt.c | h main"

all work! :) Don't worry if you forget to close the quote, bash will remember you with a "continuing line character".