pcregrep中是否有任何选项允许我只打印一次匹配的字符串模式?我开始了解选项--match-limit。但是pcregrep并没有意识到这个选择。是否有支持此选项的特定版本。
我假设--match-limit=1
只打印匹配模式的一次。
您也可以通过其他可能的方式告诉我们。我正在通过python的命令实用程序从python脚本执行pcregrep命令。
答案 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
的错误。
查看完整文档,我没有看到任何限制匹配数量的选项。当然你可以设计你的正则表达式。
了解详情
pcregrep --help