我正在尝试最多搜索3个连续元音
我尝试了
grep -E "([AEIOUaeiou]{3})" gpl3.txt
得到结果
我想要的是不要获得您在输出的第一行中看到的( aaaaaaaaa )。所有其他输出正确。
感谢您的帮助
答案 0 :(得分:4)
如果要避免使用-P
选项并提前行,则可以使用类似以下的内容。
grep -iE '(^|[^aeiou])[aeiou]{3}([^aeiou]|$)' gpl3.txt
它刚刚匹配
试运行:
IT070137 ~/tmp $ cat gpl3.txt
aaaaaaaaaaaaaaa
asdaiosd
aa
aaa
aaaa
this is a righteous queue
IT070137 ~/tmp $ grep -E '(^|[^aeiou])[aeiou]{3}([^aeiou]|$)' gpl3.txt
asdaiosd
aaa
this is a righteous queue
答案 1 :(得分:2)
尝试使用否定的超前预测,断言四个或多个元音不会连续出现:
grep -P "^(?!.*[AEIOUaeiou]{4,}).*$" gpl3.txt
我们需要在Perl模式下运行此命令,以使用否定先行。
答案 2 :(得分:2)
如果您想找到所有恰好出现的三个元音(不多也不少),则可以尝试以下模式:
grep -iP '(?<![aeiou])[aeiou]{3}(?![aeiou])'
使用选项-P
使grep
将Perl库用于正则表达式,它比标准的regexp库具有更多的功能。例如,它知道模式(?<!something)
(?!something)
的意思是“一定不要在某事之前”和“一定不要在某事之后” , 分别。我用这个来表达:
»查找长为三个元音且没有前一个元音且不后跟一个元音的东西。«这是另一种说法,»长为三个元音«。
关于可移植性:您需要使用grep
来使用Perl正则表达式。今天,我想这将不再是问题,但是如果您碰巧为历史机器编码,则需要先检查一下。