Você deve usar o grep com expressão regular perl ( -P option) que suporta asserções lookahead como (?: ) . Também chaves não devem ser escapadas.
Tente:
grep -P '\w*(?:\.\w*)*@\w*(?:\.\w*)*\w{2,5}'
Como as expressões perl são um recurso experimental no GNU grep, você pode querer alterar (?: ) para ( ) e expressões estendidas do usuário ( -E ):
grep -E '\w*(\.\w*)*@\w*(\.\w*)*\w{2,5}'
Algumas das implementações de expressões estendidas não suportam chaves { e } . Para portabilidade, você pode usar expressões regulares básicas.
Para usar expressões regulares básicas, escape de ( e ) e deixe também { e } escaped.
grep '\w*\(\.\w*\)*@\w*\(\.\w*\)*\w\{2,5\}'