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