0

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

4

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.