【问题标题】:How can I specify a regex in a zgrep/zcat command?如何在 zgrep/zcat 命令中指定正则表达式?
【发布时间】:2020-02-13 00:48:43
【问题描述】:

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

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

【问题讨论】:

  • 您可能需要将\w 替换为[[:alnum:]_]
  • 嘿,你之前已经帮过我了!我试过了,但我有invalid back reference
  • 是的,您还需要创建一个捕获组。试试zgrep '\([[:alnum:]_]\).*\1.*\1.*\1' a.gz

标签: regex linux zcat zgrep


【解决方案1】:

几点说明:

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

因此,使用

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

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

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

【讨论】:

  • 它是联系您的媒介吗?我有更多关于 regex 和 zgrep 的问题,但我不想创建大量帖子的垃圾邮件
  • @J.erome 请加入chat
  • 因此,要匹配 3 次或更多次,请使用 \{3,\} 而不是 \{3\}
猜你喜欢
  • 2016-05-30
  • 2020-02-12
  • 2012-04-07
  • 1970-01-01
  • 2011-04-23
  • 2012-10-29
  • 2015-08-27
  • 2012-06-21
相关资源
最近更新 更多