Você pode usar expressões regulares perl com visões antecipadas negativas.
$ grep -Pi '^([aeiouy])([bcdfghjklmnpqrstvwxz])e(?!)([bcdfghjklmnpqrstvwxz])(?!)([aeiouy])(?!)(?!)([bcdfghjklmnpqrstvwxz])n$' /usr/share/dict/words
American
american
everymen
Expandido:
$ perl -lnE '
BEGIN { $vowel = qr/[aeiouy]/i; $consonant = qr/[bcdfghjklmnpqrstvwxz]/i }
say if /^ ($vowel) # vowel
($consonant) # consonant
e # literal
(?!)($consonant) # different consonant
(?!)($vowel) # different vowel
(?!)(?!)($consonant) # 3rd different consonant
# first vowel again
n # literal
$/xi
' /usr/share/dict/words
American
american
everymen
O exemplo do BOQQE seria
grep -Pi '^([bcdfghjklmnpqrstvwxz])([aiouy])(?!)([bcdfghjklmnpqrstvwxz])(?!)([aiouy])$' /usr/share/dict/words
que retorna 779 resultados (444 case sensitive) com meu dicionário.