ack 2.0 has been released. ack is a grep-like search tool that has been optimized for searching large heterogeneous trees of source code.
ack has been around since 2005. Since then it has become very popular and is packaged by all the major Linux distributions. It is cross-platform and pure Perl, so will run on Windows easily. See the “Why ack?” page for the top ten reasons, and dozens of testimonials.
ack 2.0 has many changes from 1.x, but here are four big differences and features that long-time ack 1.x users should be aware of.
- By default all text files are searched, not just files with types that ack recognizes. If you prefer the old ack 1.x behavior of only searching files that ack recognizes, you can use the -k/--known-types option.
- There is a much more flexible type identification system available. You can specify a file type based on extension (.rb for Ruby), filename (Rakefile is a Ruby file), first line matching a regex (Matching /#!.+ruby/ is a Ruby file) or regex match on the filename itself.
- Greater support for ackrc files. You can have a system-wide ackrc at /etc/ackrc, a user-specific ackrc in ~/.ackrc, and ackrc files local to your projects.
- The -x argument tells ack to read the list of files to search from stdin, much like xargs. This lets you do things like git ls | ack -x foo and ack will search every file in the git repository, and only those files that appear in the repository.
On the horizon, we see creating a framework that will let authors create ack plugins in Perl to allow flexibility. You might create a plugin that allows searching through zip files, or reading text from an Excel spreadsheet, or a web page.
ack has always thrived on numerous contributions from the ack community, but I especially want to single out Rob Hoelz for his work over the past year or two. If it were not for Rob, ack 2.0 might never have seen the light of day, and for that I am grateful.
A final note: In the past, ack’s home page was betterthangrep.com. With the release of ack 2.0, I’ve changed to beyondgrep.com. “Beyond” feels less adversarial than “better than”, and implies moving forward as well as upward. beyondgrep.com also includes a page of other tools that go beyond the capabilities of grep when searching source code.
For long time ack users, I hope you enjoy ack 2.0 and that it makes your programming life easier and more enjoyable. If you’ve never used ack, give it a try.
April 19, 2013 at 10:52 am
Very cool. Any tips for getting ack running in Windows, and configuring Emacs to use it on M-x ack?
April 19, 2013 at 12:18 pm
The install instructions are at http://beyondgrep.com/install/ If you are having problems, then please post to the ack-users list or submit an issue on GitHub. As to Emacs, I don’t have any help on that. Sorry.
April 19, 2013 at 12:16 pm
Great, I love the -a by default change.
Still no .ackignore though? That’s pretty much the only reason I use ag instead.
April 19, 2013 at 12:20 pm
What would you have .ackignore do? Tell what files to ignore? You can do that in your .ackrc. For example, you can do something like this in your ackrc:
–ignore-file=ext:pdf
If you want to have that at the project level, that’s fine. Just put it in ~/myproject/.ackrc
Does that do what you’re looking for?
April 22, 2013 at 4:50 am
I like the -a option very much. It is better than -l option, and it easier to type. I think it would be a good idea to allow multiple color options, I am wondering how to do this.
April 22, 2013 at 6:46 am
I’m not sure what you’re asking. The -a option in ack 1.x would search all files even if ack didn’t recognize the type. The -l (dash ell) option tells ack only to show the filenames of the files that contain matches. Neither one of them have anything to do with colors.
Can you tell me more about what it is you’re asking?