¿Cómo puedo excluir una palabra con grep?
Necesito algo como:
grep ^"unwanted_word"XXXXXXXX
Puedes hacerlo usando -v
(for --invert-match
) la opción de grep como:
grep -v "unwanted_word" file | grep XXXXXXXX
grep -v "unwanted_word" file
Filtrará las líneas que tienen unwanted_word
y grep XXXXXXXX
enumerará 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
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).
Si grep
admite la expresión regular de Perl con -P
la 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 foo
exceptofoo3
$ grep -P '(?!.*foo3)foo' file
foo1
foo2
foo4
$