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

mac*_*ost 47 ack

使用普通grep命令有一个--exclude选项(这里详细介绍:使用grep --exclude/ - include语法来不通过某些文件),可以让你在grepping时忽略特定的文件.

Ack的--type选项可以处理95%你想要排除文件的情况,但它没有(据我所知)处理排除特定文件的情况.我有一个已编译的JS文件,其中包含其他每个JS文件的内容(在一行上),所以每当我grep 任何东西时,我都会找回那个巨大的编译文件的全部内容.

我不想放弃ack并回过头来讨论这个问题,但这真的很烦人.请有人告诉我,有一种方法可以从ack搜索中排除特定文件.

jbo*_*man 100

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

--ignore-file=is:cljout.js

  • 你可以使用`match`和正则表达式来匹配文件名和`ext`来扩展.排除js文件`--ignore-file = ext:js`.排除名称为foo和bar的文件`--ignore-file ='match:/ foo | bar /'`.在带有`|`的正则表达式的情况下使用引号转义参数,以便shell不将其作为管道执行. (12认同)
  • 确切的文件名匹配.http://beyondgrep.com/documentation/ack-2.04-man.html#is_filename (4认同)
  • 这适用于文件名,但如果我想提供特定文件(即路径和文件名),则不行. (4认同)
  • 这整个“是:”事情并不那么明显和令人讨厌 (3认同)
  • `is:` 在这里做什么? (2认同)

Rim*_*ian 11

如果你运行ack --create-ackrc它将为常见文件输出一大堆预设,如minified javascript,css和node_modules和.git等目录.很有用!

这是缩小的js选项:

# minified Javascript
--ignore-file=match:/[.-]min[.]js$/
--ignore-file=match:/[.]js[.]min$
Run Code Online (Sandbox Code Playgroud)

如果要保存此项以.ackrc运行

ack --create-ackrc >> ~/.ackrc
Run Code Online (Sandbox Code Playgroud)

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


And*_*ter 10

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

至于您缩小的Javascript文件的具体情况,您使用的是什么版本的ack?ack 1.96应该忽略基于扩展名的缩小JavaScript.如果扩展检查不起作用,你可能会破解ack本身,因为它是一个单独的Perl程序.你可以破解这个is_searchable功能.

在ack 2.0中,我们正在考虑忽略任何超过500个字符的行,因为它显然不是源代码.

您可能还想加入我们的ack-users邮件列表.我们非常敏感.