AND e OR lógicos com grep

AND e OR lógicos com grep

Quero extrair as linhas que correspondem à seguinte operação lógica:

"AB+CD" AND ("nonAB+nonCD" OR "nonAB+CD"). 

O que significa que quero linhas com:

AB+CD,nonAB+nonCD
AB+CD,nonAB+CD
AB+CD,nonAB+nonCD,nonAB+CD

Significa que estou procurando linhas com "AB+CD" comumouambosde ("nonAB+nonCD" OU "nonAB+CD").
Observe que o + faz parte da string. Quero tratá-lo como uma string (caractere) e não como uma operação aritmética.

O que fiz foi usar pipe para executar AND. E use \| para a sala de cirurgia. Então meu comando é:

grep ',AB+CD' test.txt | grep ',nonAB+nonCD\|,nonAB+CD'

O primeiro |é para tubulação. O segundo é OR lógico para grep conforme estereferênciaque dá este exemplo para OR lógico com grep:

grep 'pattern1\|pattern2' filename

O resultado que me aparece nas cores do terminal (encontra) a segunda parte do comando. A primeira parte (antes do tubo |não ficar destacada no resultado colorido. Minha pergunta:

1) Meu comando está correto?

2) Como colorir as descobertas completas do comando?

Responder1

Usando -Pa opção (PCRE):

grep -P 'AB\+CD,(?:nonAB\+nonCD|nonAB\+CD)' file.txt

Saída:

AB+CD,nonAB+nonCD
AB+CD,nonAB+CD
AB+CD,nonAB+nonCD,nonAB+CD

informação relacionada