Eu nem usaria grep no exemplo que você postou, é simples o suficiente para ser manipulado por cut :
$ echo name:phone:[email protected] | rev | cut -d: -f1 | rev
[email protected]
EDITAR :
Mas se você quiser grep , seria algo assim:
$ echo name:phone:[email protected] | grep -oE '[a-zA-Z]+@[a-zA-Z]+\.com'
[email protected]
Observe que + é usado, o que representa one or more instances do caractere anterior em expressões regulares e que -E precisa ser usado com o grep para que isso funcione:
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see below).
(-E is specified by POSIX.)