14

我正在尝试将ack-is-better-than-grep (ack) 与正则表达式一起使用来在我的代码存储库中查找行和片段。我的理解是 ack 使用Perl 衍生正则表达式,对吗?

但是,我不确定这些查询将如何工作:

ack 'foo'
ack '.*(foo)+.*'

ack '.*foo'
ack 'foo.*'

他们能给出不同的输出吗?如果是这样,为什么?

编辑:在我的测试中,它们输出不同的结果(例如,第一个输出的匹配比其他的多)。它们还突出显示同一行的不同部分。

编辑2:输出的差异显然与突出显示(输出的颜色)有关。我注意到,如果我使用上述命令的输出运行ack--nocolor则它们是相同的。显然ack使用默认颜色运行会使部分输出在我的机器/配置中不可见。我在 Ubuntu 11.04 的 bash 的 GNOME 终端上运行它。

4

1 回答 1

17

我的理解是 ack 使用 Perl 派生的正则表达式,对吗?

是的。实际上,ack它是用 Perl 编写的,只是将表达式转发到内部引擎。

他们能给出不同的输出吗?如果是这样,为什么?

表达式应该找到相同的结果。但是,输出可能仍然不同,因为ack它允许在其输出中突出显示语法(默认情况下;除非--nocolor指定)——它使用 ANSI 转义码对输出中的命中进行着色,并且显然'foo'会突出显示与'.*foo'(和其他查询)不同的内容。

即,在以下输入中:

This is a foo test.

查询'foo'将突出显示:“<code>foo”,而'.*foo'将突出显示“<code>This is a foo”。

于 2011-07-18T19:20:19.017 回答