A.J
A.J

Reputation: 1180

Grep multiple strings

I want to find a list of files that have A but do not have B and C.

grep -r -L 'B\|C' finds the ones without B and C, but how do I add the condition of having A as well?

Upvotes: 0

Views: 141

Answers (3)

Mark Setchell
Mark Setchell

Reputation: 207873

If I understand your question correctly:

grep -l "A" $(grep -r -E -L "B|C" *)

i.e. search for files containing "A" in the list of files that your original command generates.

Upvotes: 2

Jose Ricardo Bustos M.
Jose Ricardo Bustos M.

Reputation: 8174

You can use negative lookahead in grep using options -P or --perl-regexp

grep -r -P -L '^(?!.*A).*$|B|C'

Upvotes: 2

anaotha
anaotha

Reputation: 623

If I understood your question correctly, you can do it like this:

grep "A" file.txt | grep -v -e "B" -e "C"

The first grep finds lines containing A, the second greptakes the result and removes lines containing either "B" or "C". This works by the -v flag which inverses matches.

Upvotes: 0

Related Questions