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".