Y y O lógicos con grep

Y y O lógicos con grep

Quiero extraer las líneas que coinciden con la siguiente operación lógica:

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

Lo que significa que quiero líneas con:

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

Lo que significa que estoy buscando líneas con "AB+CD" conunooambosde ("noAB+noCD" O "noAB+CD").
Tenga en cuenta que el + es parte de la cadena. Quiero tratarlo como una cadena (carácter), no como una operación aritmética.

Lo que hice fue usar pipe para ejecutar AND. Y use \| para el quirófano. Entonces mi comando es:

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

El primero |es para tuberías. El segundo es lógico O para grep según estoreferenciaque da este ejemplo de OR lógico con grep:

grep 'pattern1\|pattern2' filename

El resultado que me aparece en la terminal colorea (busca) la segunda parte del comando. La primera parte (antes de la tubería |no está resaltada en el resultado coloreado. Mi pregunta:

1) ¿Mi comando es correcto?

2) ¿Cómo colorear los hallazgos completos del comando?

Respuesta1

Usando -Pla opción (PCRE):

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

Producción:

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

información relacionada