使用pcregrep仅打印一次匹配模式

时间:2014-04-22 10:31:58

标签: python regex

pcregrep中是否有任何选项允许我只打印一次匹配的字符串模式?我开始了解选项--match-limit。但是pcregrep并没有意识到这个选择。是否有支持此选项的特定版本。

我假设--match-limit=1只打印匹配模式的一次。

您也可以通过其他可能的方式告诉我们。我正在通过python的命令实用程序从python脚本执行pcregrep命令。

1 个答案:

答案 0 :(得分:1)

在我们研究--match-limit之前,让我们回顾一下几乎做你想做的两个选项。

选项1。当您只想知道是否可以在文件中找到匹配项,但不关心匹配项时,可以使用-l选项,如下所示:

pcregrep  -l \d\d\d test.txt

其中\d\d\d是模式,test.txt包含字符串。

选项2。要计算匹配数,请使用

pcregrep  -c \d\d\d test.txt

这可能是我们最接近您想要做的事情。

什么是match--limit

--match-limit=1确实有效,但它没有按照您的意愿行事。

来自文档:

  

--match-limit选项提供了限制资源使用的方法   当处理不匹配但具有的模式时   搜索树中存在大量可能性。经典   示例是使用嵌套无限重复的模式。在内部,   PCRE使用一个名为match()的函数,它会重复调用   (有时是递归的)。由--match-limit设置的限制强加于   匹配期间调用此函数的次数,具有   限制可能发生的回溯量的效果。

所以--match-limit是关于记忆的,而不是关于匹配的数量。

让我们试一试:

如果您创建一个名为test.txt的文件并添加一些包含三位数的行,如下所示:

111
123
456

然后运行pcregrep --match-limit=1 \d\d\d test.txt将匹配所有这些行。

但是如果你运行pcregrep --match-limit=1 \d{3} test.txt,你会收到the resource limit was exceeded的错误。

查看完整文档,我没有看到任何限制匹配数量的选项。当然你可以设计你的正则表达式。

了解详情

  1. 您可能知道这一点,但对于简短的文档类型pcregrep --help
  2. 完整文档可以从pcre.org
  3. 下载到pcre包中
  4. 有关使用示例,请参阅grep in PCRE