_   /|
\'o.O'
=(___)=
   U

ack is a grep-like source code search tool.

The latest version of ack is v3.9.0, released 2025-05-26.

Image for: The latest version of ack is v3.9.0, released 2025-05-26.

Changelog for v3.9.0

Image for: Changelog for v3.9.0

Designed for programmers with large heterogeneous trees of source code, ack is written in portable Perl 5 and takes advantage of the power of Perl's regular expressions.

What's new in ack?

New boolean options --and, --or and --not

Image for: New boolean options --and, --or and --not

The new repeatable --and, --or and --not options lets you get more precise matches. If you want any of "dogs" or "cats" or "fish", use

ack dogs --or cats --or fish

If you want all three on the line:

ack dogs --and cats --and fish

And of course if you want "dogs", but not if "cats" or "fish" are on the line:

ack dogs --not cats --not fish

Easier to understand error messages

Image for: Easier to understand error messages

The error message ack displays when the regex passed is invalid has been improved. The message is more readable and includes a pointer to the offending part of the regex. For example:

$ ack 'status: (open|closed|in progress'
ack: Invalid regex 'status: (open|closed|in progress'
Regex: status: (open|closed|in progress
               ^---HERE Unmatched ( in regex

New --proximate option groups matches near each other

Image for: New --proximate option groups matches near each other

A new option --proximate=N groups together lines of output that are within N lines of each other in the file. This is useful when looking for matches that are related to each other.

For example, these results:

    15: First match
    18: Second match
    19: Third match
    37: Fourth match

look like this with --proximate=1.

    15: First match

    18: Second match
    19: Third match

    37: Fourth match

Improved -w option

Image for: Improved -w option

The -w option, which tells ack to only find whole-word matches, did not always work if your pattern began or ended with puncutation. ack would make guesses as to what your intent was, but it was not well-defined. Now, ack disallows regexes that begin or end with non-word characters.

This means that if you use ack -w foo:, the new ack will not allow it, whereas ack 2.x would.

Added -S as a synonym for --smart-case

Image for: Added -S as a synonym for --smart-case

For those without --smart-case always on, the -S will be easier for when you do want to use it.

Smart-case matching makes ack do a case-insensitive search unless the pattern being matched has a capital letter in it.

Added -I to force case-sensitivity

Image for: Added -I to force case-sensitivity

If you use --smart-case in your .ackrc, you can use -I to force case-sensitivity instead of having to use --no-smart-case (which still works).

Significant speed improvements

Image for: Significant speed improvements

Run times for ack 3 compared to ack 2.22 are 30-40% faster because of removal of unused infrastructure for plugins.

How to install

Image for: How to install

ack is simple to install, via CPAN, package or simple download. Read how.

People love ack

Image for: People love ack

"Every once in a while something comes along that improves an idea so much, you can't ignore it. Such a thing is Ack, the grep replacement."

Read what else people are saying.

Follow us on Twitter

Image for: Follow us on Twitter

We're all about knowing when to move beyond the stock Unix tools. Follow us on Twitter at @beyondgrep for tips, hints and software news.