this post was submitted on 15 Feb 2024
16 points (94.4% liked)

commandline

1749 readers
1 users here now

founded 1 year ago
MODERATORS
 

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]?

you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 7 points 9 months ago (1 children)

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, then awk '!/B/ || (/A/ && /B/)' will work.

[โ€“] [email protected] 1 points 9 months ago

Thank you! This was exactly was I was looking for. :)