Reputation: 1180
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
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
Reputation: 8174
You can use negative lookahead in grep
using options -P
or --perl-regexp
grep -r -P -L '^(?!.*A).*$|B|C'
Upvotes: 2
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 grep
takes the result and removes lines containing either "B" or "C". This works by the -v
flag which inverses matches.
Upvotes: 0