如何从ack(ack-grep)中排除特定文件?


How do you exclude a specific file from ack (ack-grep)?

在正常的grep命令中,有一个--exclude选项(在这里详细介绍:使用grep--exclude/--include语法不通过某些文件进行grep),它允许您在进行grepping时忽略特定的文件。

ACK的--type选项可以处理95%的您希望排除文件的情况,但它(据我所知)不处理排除特定文件的情况。我有一个编译过的JS文件,其中包含了其他所有JS文件的内容(在一行中),所以每次我放弃任何东西时,都会得到这个巨大的编译文件的全部内容。

我不想因为这件事放弃ACK回到GREP,但这真的很烦人。请,有人告诉我有一种方法可以从ACK搜索中排除特定的文件。


要使用ACK2.0忽略单个文件,请为--ignore file标志提供过滤器规范:

--ignore-file=is:cljout.js


不,ACK 1.x不允许排除单个文件。在ACK 2.0中,您可以。ACK 2.0目前在其第一个alpha中,现在是ACK的当前推荐版本。

就您的具体情况而言,您使用的是什么版本的ACK?ACK 1.96应忽略基于扩展名的小型JavaScript。如果扩展检查不起作用,那么您可能会自行入侵ACK,因为它是一个单独的Perl程序。你可以破解is_searchable函数。

在ACK2.0中,我们希望忽略超过500个字符的任何行,因为它显然不是源代码。

您也可以加入ACK用户邮件列表。我们反应很灵敏。


如果您运行ack --create-ackrc,它将为常见文件(如小型javascript、css和node_modules和.git)输出一大堆预设。非常有用!

下面是迷你JS选项:

1
2
3
# minified Javascript
--ignore-file=match:/[.-]min[.]js$/
--ignore-file=match:/[.]js[.]min$

如果你想把这个保存到.ackrc运行

1
ack --create-ackrc >> ~/.ackrc

然后从文件中删除不需要的内容。


如果要排除特定文件夹,以下命令可能会帮助您:

ack keywords --ignore-dir folder_name

man ack将提供进一步的细节:)

--[no]ignore-dir=DIRNAME, --[no]ignore-directory=DIRNAME

--ignore-file=FILTERTYPE:FILTERARGS


如果必须经常过滤文件,也可以在.ackrc文件中指定这些选项。