Artificial intelligent assistant

Understanding an egrep expression I stumbled across the following egrep expression: egrep '^([^aieou]*[aieou]){5,7}[^aieou]*$' /usr/share/dict/words on this page: < The expression is supposed to find the words that contain between 5 and 7 vowels. I understand the first ^ meaning from the beginning of the line and the second ^ to negate any of the aieou followed by any number of characters and one of the aeiou between 5 and 7 times. But I did not get how the first and last expressions: `[^aieou]`

It looks for zero or more consonants (`[^aieou]*`) followed by 5 to 7 vowels (`([aieou]){5,7}`) followed by zero or more consonants (`[^aieou]*`). The entire regular expression is anchored to the beginning of the line (`^`) and the ending, (`$`).

### Example


$ egrep '^([^aieou]*[aieou]){5,7}[^aieou]*$' \
/usr/share/dict/words | head -10
abacinate
abacination
abacterial
abaisance
abalation
abalienate
abalienated
abalienating
abalienation
abandonable


### Details

So when it matches say this first word, `abacinate`, the first letter a has 0 consonants to the left, so we match that part.

As additional vowels with either zero or more consonants are found on the left and/or right, we match those situations too. If we find 5 to 7 of them, then we match.

xcX3v84RxoQ-4GxG32940ukFUIEgYdPy ea3090555195f24f8490761e7927a043