【问题标题】:GNU grep -P option mismatch with Perl regular expressionGNU grep -P 选项与 Perl 正则表达式不匹配
【发布时间】:2015-06-22 10:43:05
【问题描述】:

在 1 行文件中查看非常简单的 grep -P 输出:

[ldagan:dfII]cat test
oh,this,is,config,2
[ldagan:dfII]grep -icP '\S+?,config,' test
0

但是,让字符串在 Perl 正则表达式中匹配确实匹配!
见下文:

[ldagan:dfII]perl -e ' if ("oh,this,is,config,2" =~/\S+?,config,/ )  
{print "yey!\n"} else {print "ney!\n"} ;'
yey!

我使用的是 GNU grep 2.5.1 版

【问题讨论】:

  • 制作这个:=~/\S+?,config, 到这个:=~/[^[:space:]]+?,config, 还添加 -P 标志
  • 你好阿维纳什。 -c 旨在表明没有匹配项。没有它,一个得到 0 行。
  • grep -ic ',config,' 等效且更简单。有没有你没有告诉我们的并发症?
  • 是的,这是一个较大文件的摘录,我无法分享,我需要在第三个逗号之后。谢谢!

标签: regex perl grep


【解决方案1】:

考虑更新 grep。它适用于 GNU grep 2.16 版:

$ /bin/grep -icP '\S+?,config,' test
1

请记住,grep 中的 -P 功能仍处于试验阶段。

【讨论】:

    【解决方案2】:

    有两种解决方案,一种是更新 grep,正如 Arkanosis 建议的那样。 第二个类似于 vihan1086 的建议。 使用

    grep -iCP '[^ ]+?' test
    

    【讨论】:

      猜你喜欢
      • 2017-02-09
      • 2020-02-19
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      相关资源
      最近更新 更多