grep在一行中找到具有相同元音的单词

时间:2016-02-12 17:48:26

标签: regex grep

给定一个txt文件,如何使用grep查找包含使用正则表达式至少5次相同元音的行?

我试过了:

egrep '[aeiou]{5,}\1' file

但它不起作用。

3 个答案:

答案 0 :(得分:2)

对于看起来像这样的测试文件

aeiou
a1a2a3a4a5
e1e2e3e4e5
aaa

我们要匹配第二行和第三行,您可以使用

$ grep -E '([aeiou]).*(\1.*){4}' infile 
a1a2a3a4a5
e1e2e3e4e5

这匹配并捕获任何一个元音,然后查找相同元音的四倍,用可选字符填充。

答案 1 :(得分:1)

使用GNU grep:

要找到至少相同元音5倍的单词:

grep -Eo '\b\w*((a\w*){5,}|(e\w*){5,}|(i\w*){5,}|(o\w*){5,}|(u\w*){5,})\b' file

请参阅:The Stack Overflow Regular Expressions FAQ

答案 2 :(得分:1)

一个想法是匹配 a 元音后跟anything并期望此模式至少5次。因此,仅对于a,那将是:

egrep '(a.*){5,}' $FILE

使用|字符为每个元音重复此操作,例如:

egrep '(a.*){5,}|(e.*){5,} <and so on>' $FILE

可能有更好的解决方案,例如压缩所有这些管道(|),但我现在想不到。