当我在单个文件中搜索时,返回不显示行号
Ack dooesn't show the line number when i search in the single file
示例)当我在 proc.c 文件中搜索 exec 时,
$ ack allocproc proc.c
allocproc(void)
p = allocproc();
if((np = allocproc()) == 0){
// Return to "caller", actually trapret (see allocproc).
但是当我搜索整个目录时,
$ ack allocproc
---- blah blah blah ----
proc.c
36:allocproc(void)
84: p = allocproc();
139: if((np = allocproc()) == 0){
357: // Return to "caller", actually trapret (see allocproc).
...我想在单个文件中搜索字符串时显示行...
也许在 .bashrc 中添加一行 alias ackl='ack -H'
并默认使用 ackl 命令...将暂时解决此问题。
ack中的-H
标志将强制ack在每个文件上放置一个文件header和行号。此行为直接从 GNU grep 复制而来。
您指出了创建 shell 别名的选项。另一种选择是将 -H
放在 ackrc 文件中。 ack 支持在三个不同的地方查找 ackrc。在 /etc/ackrc 中有一个 system-wide,在您的 ~/.ackrc 文件中有一个是您个人的,您还可以有一个 project-specific 文件,通常在项目的根目录中。
有关 ackrc 文件的更多信息,请查看 ack 手册(ack --man
是一种查看方式)并查找 "THE .ackrc FILE" 和 "ACKRC LOCATION SEMANTICS".[=15= 部分]
将 -H
放在 .ackrc 中的一个缺点是,无论您如何调用 ack,它都将始终有效,因此,例如,如果您通过 ack 传输来自一个进程的输出, ack 仍会显示标题和行号。
另一种处理方法:只需在需要时添加 -H
选项即可。
我发现,在 grep 和 ack 中,如果它们对一个文件的行为与对多个文件的行为不同, 您可以通过将 /dev/null
作为第二个文件进行搜索来强制执行多文件行为。
当然,使用 -H
开关要干净得多(并且具有被列在文档中的优势,以便好奇的维护者可以看到其使用背后的确切目的),但是如果您在紧要关头并且没有可用的文档(或者如果您正在使用其他一些程序,这些程序对一个文件和多个文件的行为不同),那么使用 /dev/null
可能会起作用。
我不建议在脚本中调用的命令中使用这种 /dev/null
技术——在这种情况下,-H
开关是首选方法,除非出于某种原因 -H
你真的无法使用。
示例)当我在 proc.c 文件中搜索 exec 时,
$ ack allocproc proc.c
allocproc(void)
p = allocproc();
if((np = allocproc()) == 0){
// Return to "caller", actually trapret (see allocproc).
但是当我搜索整个目录时,
$ ack allocproc
---- blah blah blah ----
proc.c
36:allocproc(void)
84: p = allocproc();
139: if((np = allocproc()) == 0){
357: // Return to "caller", actually trapret (see allocproc).
...我想在单个文件中搜索字符串时显示行...
也许在 .bashrc 中添加一行 alias ackl='ack -H'
并默认使用 ackl 命令...将暂时解决此问题。
ack中的-H
标志将强制ack在每个文件上放置一个文件header和行号。此行为直接从 GNU grep 复制而来。
您指出了创建 shell 别名的选项。另一种选择是将 -H
放在 ackrc 文件中。 ack 支持在三个不同的地方查找 ackrc。在 /etc/ackrc 中有一个 system-wide,在您的 ~/.ackrc 文件中有一个是您个人的,您还可以有一个 project-specific 文件,通常在项目的根目录中。
有关 ackrc 文件的更多信息,请查看 ack 手册(ack --man
是一种查看方式)并查找 "THE .ackrc FILE" 和 "ACKRC LOCATION SEMANTICS".[=15= 部分]
将 -H
放在 .ackrc 中的一个缺点是,无论您如何调用 ack,它都将始终有效,因此,例如,如果您通过 ack 传输来自一个进程的输出, ack 仍会显示标题和行号。
另一种处理方法:只需在需要时添加 -H
选项即可。
我发现,在 grep 和 ack 中,如果它们对一个文件的行为与对多个文件的行为不同, 您可以通过将 /dev/null
作为第二个文件进行搜索来强制执行多文件行为。
当然,使用 -H
开关要干净得多(并且具有被列在文档中的优势,以便好奇的维护者可以看到其使用背后的确切目的),但是如果您在紧要关头并且没有可用的文档(或者如果您正在使用其他一些程序,这些程序对一个文件和多个文件的行为不同),那么使用 /dev/null
可能会起作用。
我不建议在脚本中调用的命令中使用这种 /dev/null
技术——在这种情况下,-H
开关是首选方法,除非出于某种原因 -H
你真的无法使用。