Ack有时不会显示行号并且会丢失颜色

时间:2013-02-01 00:40:29

标签: windows command-line ack

ack中的奇怪(betterthangrep.com) - 有时候我会得到一个行号,有时候不行。

在第一个例子中,我在一些Python文件中寻找一个简单的短语。 它工作正常,显示行号233。 在第二个例子中,我查找第一列以'5'结尾的所有行。

D:\DSWProj\2012L\src> perl D:\ack-standalone.pl  "return True"  *.py
Volume5.py
233:    return True


D:\DSWProj\2012L\data\R123> perl D:\ack-standalone.pl  "5 "  NeedMoreCoffee_n5_*.data
Volume5 FooData  coffee_n5  2013-01-29 10:14
 397125 0 0 1 0
 397135 0 0 1 0

这两行正好是标题行后面文件中的前两行。

为什么第二个例子中没有行号?还没有打印文件名,也没有着色。 Python示例将输出着色 - 行号为黄色,文件名为绿色。 (令我惊讶的是,自从我上次询问以来,被告知Windows命令行shell根本无法着色任何东西。)这是ack中的错误,还是Windows的怪癖?除了在不同文件中明显搜索不同的东西之外,我是否在这两种情况之间做了一些不知不觉的事情?

在Windows 7 64位上运行,使用两天前(2013年1月28日)下载的Strawberry Perl 5.16.2, and ack standalone script,ver 1.96,两天前也下载了。

1 个答案:

答案 0 :(得分:3)

我相信ack神奇*知道*.py文件是Python源代码,并且会显示源代码文件的行号和颜色,但不会显示*.data这样的普通旧数据文件。这被认为是一个功能,而不是一个错误。

如果您想要grep的可预测,可组合的替代品,请尝试grep。 ;)

* - 当然,这不是真正的魔术;它可以在.ackrc文件中配置。运行ack --help-types以获取更多信息。

编辑:我错了!这不是因为.py.data之间的差异;这是因为ack pattern f1ack pattern f1 f2 ...之间存在差异。在后一种情况下,ack将打印文件f1 f2 ...中包含匹配项的;在前一个(单个文件)的情况下,ack的行为更像grep

即使对于单个文件,也要欺骗ack生成行号,请在行尾添加假文件。对于Cygwin,你可能会这样做

perl D:\ack-standalone.pl  "5 "  NeedMoreCoffee_n5_*.data /dev/null

对于Windows,也许这仍然有效:

perl D:\ack-standalone.pl  "5 "  NeedMoreCoffee_n5_*.data NUL

(字面意思是字母N U L,这就是Windows拼写/dev/null的方式;另见CON,LPT1等。)