Se a sua versão de grep
for compatível com PCRE (o% GNU grep
faz isso com a opção -P
ou --perl-regexp
), você pode usar lookaheads para corresponder várias palavras em qualquer ordem:
grep -P '(?=.*?word1)(?=.*?word2)(?=.*?word3)^.*$'
Isso não destacará as palavras, no entanto. Lookaheads são asserções de comprimento zero, não fazem parte da sequência correspondente.
Acho que sua solução de tubulação deve funcionar para isso. Por padrão, grep
apenas colore a saída quando estiver indo para um terminal, portanto, somente o último comando no pipeline será realçado, mas você pode substituir isso com --color=always
.
grep --color=always foo | grep --color=always bar