Вы должны использовать grep с регулярным выражением perl (опция -P ), которое поддерживает такие предположения, как (?: ) :). Также не следует избегать фигурных скобок.
Пытаться:
grep -P '\w*(?:\.\w*)*@\w*(?:\.\w*)*\w{2,5}'
Поскольку выражения perl являются экспериментальной функцией GNU grep, вы можете изменить (?: ) ( ) и пользовательские расширенные выражения ( -E ):
grep -E '\w*(\.\w*)*@\w*(\.\w*)*\w{2,5}'
Некоторые реализации расширенных выражений не поддерживают фигурные скобки { и } . Для переносимости вы можете использовать основные регулярные выражения.
Использовать базовые регулярные выражения escape ( и ) и оставлять также { и } экранированными.
grep '\w*\(\.\w*\)*@\w*\(\.\w*\)*\w\{2,5\}'