Inverting match with grep, unless another term exists
Inverting match with grep, unless another term exists
I have a list containing a set of tags, and would like to exclude one tag, unless another tag exists in the line.
Say I have the following list, and want to exclude B
, unless A
is present.
[A,B] [A,C] [B,C] [A] [B]
I can reverse grep for B
:
> grep --invert-match "B" [A,C] [A]
How can I find the previous list, but also the item containing [A,B]
?
I like to use awk instead of grep wherever possible, especially for weird logic like this.
awk '!/B/ || /A.*B/'
is one way to skin that cat. If you don't care what order A and B are in on the lines containing both, thenawk '!/B/ || (/A/ && /B/)'
will work.Thank you! This was exactly was I was looking for. :)