
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 -P
la 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