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