¿Cómo puedo excluir una palabra con grep?

Resuelto john asked hace 13 años • 9 respuestas

Necesito algo como:

grep ^"unwanted_word"XXXXXXXX
john avatar Dec 27 '10 18:12 john
Aceptado

Puedes hacerlo usando -v(for --invert-match) la opción de grep como:

grep -v "unwanted_word" file | grep XXXXXXXX

grep -v "unwanted_word" fileFiltrará las líneas que tienen unwanted_wordy grep XXXXXXXXenumerará solo las líneas con patrón XXXXXXXX.

EDITAR:

Según su comentario, parece que desea enumerar todas las líneas sin el archivo unwanted_word. En ese caso todo lo que necesitas es:

grep -v 'unwanted_word' file
codaddict avatar Dec 27 '2010 11:12 codaddict

Entendí la pregunta como "¿Cómo puedo hacer coincidir una palabra pero excluyo otra", para lo cual una solución son dos grep en serie: el primer grep encuentra la "palabra1" deseada, el segundo grep excluye la "palabra2":

grep "word1" | grep -v "word2"

En mi caso: necesito diferenciar entre "trama" y "#trama", lo cual la opción "palabra" de grep no funciona ("#" no es alfanumérico).

JPGConnolly avatar Nov 21 '2012 08:11 JPGConnolly

Si grepadmite la expresión regular de Perl con -Pla opción, puede hacer (si es bash; si es tcsh, deberá escapar de !):

grep -P '(?!.*unwanted_word)keyword' file

Manifestación:

$ cat file
foo1
foo2
foo3
foo4
bar
baz

Enumeremos ahora todos fooexceptofoo3

$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$ 
codaddict avatar Dec 27 '2010 11:12 codaddict