如何使用 grep 从文件中连续显示 5 个元音?

如何使用 grep 从文件中连续显示 5 个元音?

我尝试这样做,但它不起作用。它不返回任何内容,而是返回字符列表。

grep  ?*\[aeiouAEIOU]\{5\}?* words

答案1

我假设您想要显示连续包含 5 个元音的行。

grep  "[aeiouAEIOU]\{5\}" words

你不需要\[.我不知道 s?*是做什么用的。并且您需要引用它以阻止 shell 解释*s 和?s。

答案2

grep -o -E '[aeiouAEIOU]{5}' words

我怀疑问题在于语法中的星号是由 shell 进行文件名扩展的,而 grep 没有看到它们,而且您转义了左括号,但没有转义匹配的右括号。但是,既然有更简单的语法,为什么还要使用复杂的语法呢?

答案3

显示仅有的五个元音,使用-o开关。

该开关-E允许直接使用大括号(未转义)。

为了不区分大小写,您可以使用-i开关。

所以例如

echo "AKAAJEJEaeiooXXX" | grep -Eio '[aeiou]{5}'

将显示 Eaeio。如果没有 -o 开关,所有行都将被输出。

如果您只想显示包含 5 个元音(即不是 6 个)的行,那就有点复杂了;您需要指定这五个元音不得与其他元音接触。并管理触及行首或行尾的边界情况。

grep -Ei '([^aeiou]|^)[aeiou]{5}([^aeiou]|$)'

这可以防止使用 -o 开关,因为“不匹配”边框现在是找到的模式的一部分。您可以使用该开关,然后使用管道连接到具有五个元音的第二个 grep,以进一步细化输出。

相关内容