我有一个很大的字典文件,其中包含 300,000 多个单词,我试图按此顺序查找所有带有元音 aeiou 的单词,但只有 5 个元音。我目前的尝试似乎不起作用,我一生都不明白为什么。
less mywords | grep -iE [^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*
我认为它包含了我正在寻找的所有单词,但有一些单词突然出现,我无法摆脱。
abstemiousnesses
ultraserious
还有其他一些,但它们是同一脉络。奇怪的是,即使我[^u]*
在前面添加类似的东西ultraserious
,也会不断弹出!任何解决方案都可以,但我希望它仅限于 grep,因为我们被告知只能使用 grep 来完成。
答案1
你没有锚定这个表达。它可以在中间匹配,因此任何匹配“之外”的元音都是允许的。
添加 ^ 和 $ 可以防止这种情况发生。
$ echo abstemiousnesses | grep -iE '[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*'
abstemiousnesses
$ echo abstemiousnesses | grep -iE '^[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*$'