首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pcregrep只打印一次匹配模式

使用pcregrep只打印一次匹配模式
EN

Stack Overflow用户
提问于 2014-04-22 10:31:57
回答 1查看 1K关注 0票数 1

在pcregrep中是否有任何选项允许我只打印一个匹配字符串模式的出现?我知道了选择--比赛限制。但是pcregrep并没有认识到这一选择。是否有支持此选项的特定版本。

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

你也可以让我知道其他可能的方法。我正在通过python的命令实用程序从python脚本执行pcregrep命令。

EN

回答 1

Stack Overflow用户

发布于 2014-04-22 11:14:00

在我们研究--比赛限制之前,让我们回顾一下两个选项,它们几乎都是你想做的事情。

选项1.当您只想知道是否可以在文件中找到匹配时,但不管匹配是什么,可以使用-l选项如下:

代码语言:javascript
复制
pcregrep  -l \d\d\d test.txt

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

选项2.以计数匹配数,使用

代码语言:javascript
复制
pcregrep  -c \d\d\d test.txt

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

什么是match--limit

--match-limit=1确实起作用,但它不做你想要它做的事情。

从文件中:

--匹配限制选项提供了一种限制资源使用的方法,当处理不匹配的模式时,这些模式在搜索树中有很多可能性。典型的例子是使用嵌套无限重复的模式。在内部,PCRE使用一个名为match()的函数,它反复调用该函数(有时是递归调用)。由-匹配限制设置的限制是对此函数在匹配期间调用的次数施加的,其效果是限制可能发生的回溯量。

因此,--match-limit是关于内存的,而不是关于匹配的数量。

,让我们来试试这个:

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

代码语言:javascript
复制
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下载到pcre包中。
  3. 有关使用示例,请参见PCRE中的grep
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23217013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档