Como usar correspondência negativa com grep no Linux (linhas de impressão que não correspondem)

0
29


grep é um utilitário de pesquisa de linha de comando para Linux que imprimirá linhas em arquivos que correspondem a um padrão ou expressão regular. A correspondência reversa também é útil, pois filtrará todas as linhas em um arquivo que contém a string fornecida.

Correspondência negativa com grep

Para usar correspondência negativa em grepvocê deve executar o comando com o -v qualquer --invert-match bandeiras Isso imprimirá apenas as linhas que não correspondem ao padrão fornecido.

grep -v "bar" file

No entanto, note que desde grep não corresponde a nada, não há como usar o -o sinalizador para imprimir “somente correspondências”, já que nada correspondeu tecnicamente. grep você pode corresponder várias vezes por linha, mas, neste caso, não importa se houver várias correspondências. Qualquer correspondência única causará grep para pular a fila.

Isso também funciona com expressões regulares (regex) e imprimirá todas as linhas registradas para corresponder à expressão regular.

grep -v "foo ba[rz]" file

Embora você possa escrever expressões regulares que façam correspondências negativas, geralmente é mais fácil reverter a correspondência dessa maneira.

Alternativamente, se você preferir usar awkvocê pode usar o modificador de exclamação para reverter expressões regulares.

awk '!/bar/' file

Nomes de arquivos correspondentes negativos

as minúsculas -l a bandeira causará grep para imprimir os nomes de arquivo que contêm correspondências em vez do conteúdo correspondente real. Isso pode ser útil ao verificar uma lista de arquivos, mas da mesma forma, também é útil reverter isso às vezes.

o inverso de -l é a variante maiúscula, -Lque faz o contrário:

grep -L "bar" ./*.txt

Certifique-se de não usar o -v bandeira com -L para reverter a correspondência antes de imprimir os arquivos sem a correspondência, ou você se deparará com uma situação de “opostos duplos” em que a correspondência é revertida duas vezes e não tem o efeito desejado.