`ack` 不显示单个文件的行号

`ack` 不显示单个文件的行号

我正在使用 ack 来搜索字符串。当我在没有文件参数的情况下运行它时,我得到行号:

$> ack function
themes/README.txt
7:Drupal's sub-theme functionality to ensure easy maintenance and upgrades.

sites/default/default.services.yml
48:    # - The dump() function can be used in Twig templates to output information

...

但是当我尝试指定文件时,我没有得到行号。

$> ack function themes/README.txt
Drupal's sub-theme functionality to ensure easy maintenance and upgrades.

我已经用谷歌搜索了一些交换机,但没有找到结果。如何获得确认以显示单个文件结果的行号?

答案1

当您不提供任何文件时,ack将搜索当前目录和子目录中的所有文件。如果文件包含匹配的模式,则ack打印该文件名、行号以及与模式匹配的行。

此行为不适用于一个文件(请参阅确认文档,搜索-H选项)。

由于 whenack没有-n选项 line grep,它将打印与其相对行号匹配的行,因此您有两种选择来解决此问题。

强制ack打印文件名-H

ack -H pattern file

/dev/null作为第二个文件传递:

ack pattern file /dev/null

答案2

您可以尝试使用选项--with-filename

ack --with-filename 'function' themes/README.txt

这个问题被提出为漏洞并且问题已被转移这里

答案3

应该有一个选项。但如果没有,您可以通过在命令行上ack传递额外的内容来欺骗认为有两个文件可供搜索:/dev/null

ack function themes/README.txt /dev/null

附带说明一下,grep(1)即使您正在搜索单个文件,也可以使用相同的技巧来显示文件名:

grep function themes/README.txt /dev/null

相关内容