Hig*_*ory 10 command-line grep regular-expression
所以我试图找到 6 个字母的单词,其中包含一个重复 3 次的字符,然后是另一个重复 3 次的字符。例如aaabbb
或oookkk
。
我在尝试:
grep -E "[a-z]\1{3}\S[a-z]\1{3}" filename
Run Code Online (Sandbox Code Playgroud)
首先,正则表达式是否正确?其次为什么我得到grep: Invalid back reference
?
ter*_*don 15
不,这是不正确的。我不知道\1{3}
应该是什么,但这就是导致您出现问题的原因。如果要查找包含三个重复字符后跟三个其他重复字符的行,可以使用以下命令:
grep -E '([a-z])\1{2}([a-z])\2{2}'
Run Code Online (Sandbox Code Playgroud)
的\1
是指第一捕获基团。您可以使用括号捕获组。然后,\1
是第一个这样的组,\2
是第二个,依此类推。由于您没有捕获的组,grep
因此抱怨无效参考,因为它没有任何参考。因此,在上面的正则表达式中,括号捕获了两个组。然后,您想要{2}
而不是{3}
因为初始匹配也被计算在内。
您没有指定是否需要匹配是一个单词,或者您是否还想在单词内进行匹配。如果您希望整个单词匹配(并排除诸如 之类的内容aaaabbb
,请改用:
grep -wE '([a-z])\1{2}([a-z])\2{2}'
Run Code Online (Sandbox Code Playgroud)
要仅打印行(单词)的匹配部分而不是整行,请使用(仅限 GNU grep):
grep -owE '([a-z])\1{2}([a-z])\2{2}'
Run Code Online (Sandbox Code Playgroud)