为什么下面的grep命令会出错:grep -Pz“(。| \ n)*”*
为什么以下grep命令段错误
因为在它的错误。
在用户应用程序的任何碰撞,如grep
,cp
,ls
等是错误在上述实用,你应该将其与一组重现它需要几个简单的步骤报告。
它看起来类似于另一个bug:编号为libpcre2
的“git grep
”有时会触发段错误。
而随着Git 2.16(Q1 2018),这个问题正在解决之中。
请参阅commit a25b908,commit ce9a257(2017年11月23日)作者Ævar Arnfjörð Bjarmason (avar
)。
(由Junio C Hamano -- gitster
--在commit b3f04e5合并,2017年12月13日)
grep
:固定下-P + PCRE2 <=10.30 + (*NO_JIT)
段错误修正的错误中的PCRE2模式下JIT(最常见的运行时配置)编译。用
(*NO_JIT)
动词的任何模式将 段错误在任何当前发布PCRE2版本:$ git grep -P '(*NO_JIT)hi.*there' Segmentation fault
那这个segfaulted是PCRE2本身就是一个错误,报告之后(“How am I supposed to use PCRE2 JIT in the face of (*NO_JIT) ?”)上
pcre-dev
,它被固定在一个尚未即将发布的PCRE版本(推测首先发布为10.31)。
现在就一起死:$ git grep -P '(*NO_JIT)hi.*there' fatal: pcre2_jit_match failed with error code -45: bad JIT option
但错误的原因是其历史可以追溯到我的 94da919(”
grep
:增加对PCRE V2" 支持我们自己的代码,2017年6月1日, Git 2.14-rc0)。正如评论在更详细地解释在这里被添加,它不是 足以只是检查
pcre2_config()
,看是否JIT应当 使用,pcre2_pattern_info()
也必须问。这是我在用传递给git的模式中的PCRE2 动词摆弄时发现的。我不希望git 的任何用户遇到这种情况,因为将PCRE2动词 传递给库,以及(* NO_JIT) 本身的相对默默无闻。
同样,这可能不是完全一样的错误,但你可能会考虑测试你的git grep
再度Git的2.16是版本,看看问题是否依然存在。
正如手册页所说,'grep -P'是“高度实验性的”,所以YMMV和使用风险自负。我个人会避免它,因为作者明确警告瘟疫,但我看到其他人提倡它... –
你是否想要匹配的时期或“任何字符,但行终止符”?我的假设是,你正试图在句子末尾或换行符的某个时段进行匹配。在您的示例正则表达式中,句号将基本匹配所有内容,在句号与文本匹配的情况下,您需要使用反斜杠进行转义。 – user3661841
也许你的_grep_确实是一种病毒。 – sln