2017-08-28 192 views
1

对于segfault命令,它必须运行在一个包含文本文件的目录中。没有或组,它不会出现分段错误。为什么下面的grep命令会出错:grep -Pz“(。| n)*”*

+0

正如手册页所说,'grep -P'是“高度实验性的”,所以YMMV和使用风险自负。我个人会避免它,因为作者明确警告瘟疫,但我看到其他人提倡它... –

+0

你是否想要匹配的时期或“任何字符,但行终止符”?我的假设是,你正试图在句子末尾或换行符的某个时段进行匹配。在您的示例正则表达式中,句号将基本匹配所有内容,在句号与文本匹配的情况下,您需要使用反斜杠进行转义。 – user3661841

+0

也许你的_grep_确实是一种病毒。 – sln

回答

0

为什么以下grep命令段错误

因为在它的错误。

在用户应用程序的任何碰撞,如grepcpls等是错误在上述实用,你应该将其与一组重现它需要几个简单的步骤报告。

0

它看起来类似于另一个bug:编号为libpcre2的“git grep”有时会触发段错误。
而随着Git 2.16(Q1 2018),这个问题正在解决之中。

请参阅commit a25b908commit 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是版本,看看问题是否依然存在。