Search code examples
regexgrepack

Multiple patterns with ack-grep?


Is it possible (and how) to chain patterns with ack (ack-grep on some distributions of Linux) like I'm used to with grep?

e.g.

grep "foo" somefile.c | grep -v "bar"

...to match all lines with "foo" but without "bar".


Solution

  • ack uses Perl regular expressions, and those allow lookahead assertions:

    ^(?!.*bar).*foo.*$
    

    will match a line that contains foo but doesn't contain bar.

    I'm not familiar with the usage of ack, but something like this should work:

    ack '^(?!.*bar).*foo.*$' myfile