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
- is:在这里做什么?
- 文件名完全匹配。beyondgrep.com/documentation/ack-2.04-man.html是u文件名
- 这对我的文件名有效,但如果我想给出一个特定的文件(即路径和文件名),就不行了。
- 如何指定多个?
- 您可以使用match和regex来匹配文件名,使用ext进行扩展。不包括JS文件--ignore-file=ext:js。排除名为foo和bar --ignore-file='match:/foo|bar/'的文件。如果regex与|一起使用,则用引号转义参数,这样shell就不会将其作为管道执行。
- 这整件事情不明显,也不烦人。
- 不容易在路径上拆分,例如使用不同的分隔符:--ignore-file='match:#path/to/thing/whatever.ext#'。
不,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邮件列表,但我想我应该先检查一下这里,确保我没有遗漏明显的内容:(-)谢谢安迪。
- 另外,我正在为编译后的JS文件选择文件名,所以目前它只是build.js。我将尝试将其重命名为built.min.js,看看是否有帮助。
如果您运行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文件中指定这些选项。