E lógico e OR com grep

0

Eu 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 por linhas com "AB + CD" com um ou ambos de ("nonAB + nonCD" OR "nonAB + CD"). br> Note que o + faz parte da string. Eu quero tratá-lo como uma string (caractere) não operação aritmética.

O que fiz foi usar o pipe para executar o AND. E use \ | para o OR. 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 o grep de acordo com essa referência que fornece este exemplo para OR lógico com grep:

grep 'pattern1\|pattern2' filename

O resultado que aparece para mim nas cores do terminal (encontra) a segunda parte do comando. A primeira parte (antes do pipe | não ser destacado no resultado colorido. Minha pergunta:

1) O meu comando está correto?

2) Como colorir os achados completos do comando?

    
por user9371654 09.06.2018 / 13:09

1 resposta

0

Usando a opção -P (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
    
por 09.06.2018 / 14:22