我尝试这样做,但它不起作用。它不返回任何内容,而是返回字符列表。
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,以进一步细化输出。