首页 > 解决方案 > 如何在 zgrep/zcat 命令中指定正则表达式?

问题描述

我想在单词列表中找到每个单词中至少有 3 次相同的字母。为了实现我所做 .*(\w).*\1.*\1.*\1.*的,你可以在这里测试它http://www.regexplanet.com/advanced/java/index.html但我不知道如何把它放在我的zgrep命令中。

如何在zgrep命令中插入此正则表达式?

标签: regexlinuxzcatzgrep

解决方案


几点注意事项:

  • 您不需要匹配行的开头和结尾,.*因为允许部分匹配
  • \w匹配 NFA 正则表达式模式中的字母、数字和下划线,在 POSIX 中,使用起来更安全[[:alnum:]_]
  • 要在 POSIX BRE 模式中形成捕获组,请使用转义括号,\(...\).

因此,使用

zgrep '\([[:alnum:]_]\).*\1.*\1.*\1' a.gz

或者,稍微收缩一下,因为它看起来有点多余,三个连续的.*\1子模式:

zgrep '\([[:alnum:]_]\)\(.*\1\)\{3\}' a.gz

推荐阅读