What's the ack syntax to find all files containing foo and also bar?


First we need to select the files that contain foo and, from that list of files, selects files that also contain bar. Thus:

ack -l foo | ack -x bar

As you can see, this works in two steps:

  1. ack -l foo produces a list of the names of files that contain foo.

  2. ack -x bar searches the files named on stdin for the expression bar.

| improve this answer | |
  • Shouldn't that first bit be ack -l foo * ? – roaima Sep 1 '16 at 22:43
  • 1
    @roaima If no files or directories are given on the command line, ack defaults to searching recursively starting with the current directory. This default is similar to grep -r pattern. Your approach. of course, would work also. – John1024 Sep 1 '16 at 22:54
  • 1
    Thank you. It's a new command to me, but the man page seemed to jump on the "it's a drop-in for grep" line. (I'll delete this later. Or maybe you can.) – roaima Sep 1 '16 at 22:56
  • @roaima Yes, it is similar but different. To make it more like grep, I have a ~/.ackrc file that contains --no-recurse. (I can, of course, override that on the command line with ack -r.) – John1024 Sep 1 '16 at 22:59

Not the answer you're looking for? Browse other questions tagged or ask your own question.