【发布时间】:2016-02-12 17:48:25
【问题描述】:
给定一个 txt 文件,如何使用 grep 使用正则表达式查找包含至少 5 次相同元音的行?
我试过了:
egrep '[aeiou]{5,}\1' file
但它不起作用。
【问题讨论】:
-
您要查找包含至少 5 个相同元音的 行,还是查找包含至少 5 个相同元音的 单词?
给定一个 txt 文件,如何使用 grep 使用正则表达式查找包含至少 5 次相同元音的行?
我试过了:
egrep '[aeiou]{5,}\1' file
但它不起作用。
【问题讨论】:
对于一个看起来像这样的测试文件
aeiou
a1a2a3a4a5
e1e2e3e4e5
aaa
我们要匹配第二行和第三行的地方,可以使用
$ grep -E '([aeiou]).*(\1.*){4}' infile
a1a2a3a4a5
e1e2e3e4e5
这匹配并捕获任何一个元音,然后查找四次相同的元音,并用可选字符填充。
【讨论】:
一个想法是匹配 a 元音后跟 anything 并期望这种模式至少 5 次。所以,对于a 来说,那就是:
egrep '(a.*){5,}' $FILE
使用| 字符对每个元音重复该操作,例如:
egrep '(a.*){5,}|(e.*){5,} <and so on>' $FILE
可能有更好的解决方案,例如压缩所有这些管道 (|),但我现在想不出任何办法。
【讨论】:
使用 GNU grep:
要找到至少 5 个元音相同的单词:
grep -Eo '\b\w*((a\w*){5,}|(e\w*){5,}|(i\w*){5,}|(o\w*){5,}|(u\w*){5,})\b' file
【讨论】: