`ack` 不在单个文件上显示行号

use*_*394 18 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

...
Run Code Online (Sandbox Code Playgroud)

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

$> ack function themes/README.txt
Drupal's sub-theme functionality to ensure easy maintenance and upgrades.
Run Code Online (Sandbox Code Playgroud)

我在谷歌上搜索了一些开关,但没有找到结果。如何获得确认以显示单个文件结果的行号?

cuo*_*glm 22

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

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

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

强制ack打印文件名-H

ack -H pattern file
Run Code Online (Sandbox Code Playgroud)

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

ack pattern file /dev/null
Run Code Online (Sandbox Code Playgroud)


tal*_*zin 9

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

ack --with-filename 'function' themes/README.txt
Run Code Online (Sandbox Code Playgroud)

此问题作为错误提出,问题已移至此处


lcd*_*047 5

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

ack function themes/README.txt /dev/null
Run Code Online (Sandbox Code Playgroud)

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

grep function themes/README.txt /dev/null
Run Code Online (Sandbox Code Playgroud)