在pcregrep中是否有任何选项允许我只打印一个匹配字符串模式的出现?我知道了选择--比赛限制。但是pcregrep并没有认识到这一选择。是否有支持此选项的特定版本。
我假设--match-limit=1只打印匹配模式的一次出现。
你也可以让我知道其他可能的方法。我正在通过python的命令实用程序从python脚本执行pcregrep命令。
发布于 2014-04-22 11:14:00
在我们研究--比赛限制之前,让我们回顾一下两个选项,它们几乎都是你想做的事情。
选项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确实起作用,但它不做你想要它做的事情。
从文件中:
--匹配限制选项提供了一种限制资源使用的方法,当处理不匹配的模式时,这些模式在搜索树中有很多可能性。典型的例子是使用嵌套无限重复的模式。在内部,PCRE使用一个名为match()的函数,它反复调用该函数(有时是递归调用)。由-匹配限制设置的限制是对此函数在匹配期间调用的次数施加的,其效果是限制可能发生的回溯量。
因此,--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错误。
查看完整的文档,我没有看到限制匹配数量的任何选项。当然,您可以设计正则表达式这样做。
获取更多信息
pcregrep --helphttps://stackoverflow.com/questions/23217013
复制相似问题