【问题标题】:grep find the words with same vowels in a linegrep 在一行中查找具有相同元音的单词
【发布时间】:2016-02-12 17:48:25
【问题描述】:

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

我试过了:

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

但它不起作用。

【问题讨论】:

  • 您要查找包含至少 5 个相同元音的 ,还是查找包含至少 5 个相同元音的 单词

标签: regex grep


【解决方案1】:

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

aeiou
a1a2a3a4a5
e1e2e3e4e5
aaa

我们要匹配第二行和第三行的地方,可以使用

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

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

【讨论】:

    【解决方案2】:

    一个想法是匹配 a 元音后跟 anything 并期望这种模式至少 5 次。所以,对于a 来说,那就是:

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

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

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

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

    【讨论】:

      【解决方案3】:

      使用 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

      【讨论】:

        猜你喜欢
        • 2019-04-14
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        • 2016-10-08
        • 1970-01-01
        • 2022-12-14
        • 2017-01-18
        • 1970-01-01
        相关资源
        最近更新 更多