varios varias utilizar test solo siguientes regulares regresará que puede patrones palabras palabra líneas los expresiones exacta egrep cuál con comiencen comandos comando caracteres buscar regex string search grep

regex - varias - ¿Cómo puedo excluir una palabra con grep?



grep varios patrones (8)

Entendí la pregunta como "¿Cómo coincido una palabra pero excluyo otra?", Para la cual una solución es dos errores en serie: primero grep para encontrar la "palabra1" deseada, segundo grep excluyendo "palabra2":

grep "word1" | grep -v "word2"

En mi caso: necesito diferenciar entre "plot" y "#plot" que la opción de "palabra" de grep no sirve ("#" no es alfanumérico).

Espero que esto ayude.

Necesito algo como:

grep ^"unwanted_word"XXXXXXXX


Invertir coincidencia utilizando grep -v:

grep -v "unwanted word" file pattern


La opción -v le mostrará todas las líneas que no coinciden con el patrón.

grep -v ^unwanted_word


La solución correcta es usar grep -v "word" file , con su equivalente awk :

awk ''!/word/'' file

Sin embargo, si tiene una situación más compleja en la que desea, digamos, que XXX aparezca y que YYY no aparezca, entonces awk es útil en lugar de colocar varias grep s:

awk ''/XXX/ && !/YYY/'' file # ^^^^^ ^^^^^^ # I want it | # I don''t want it

Incluso se puede decir algo más complejo. Por ejemplo: quiero esas líneas que contienen XXX o YYY , pero no ZZZ :

awk ''(/XXX/ || /YYY/) && !/ZZZ/'' file

etc.


Si su grep admite la expresión regular de Perl con la opción -P , puede hacerlo (si bash; si tcsh necesitará escapar de la ! ):

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

Manifestación:

$ cat file foo1 foo2 foo3 foo4 bar baz

Ahora vamos a enumerar todos foo excepto foo3

$ grep -P ''(?!.*foo3)foo'' file foo1 foo2 foo4 $


También puedes hacerlo usando la opción -v de grep como:

grep -v "unwanted_word" file | grep XXXXXXXX

grep -v "unwanted_word" file filtrará las líneas que tienen la grep XXXXXXXX y grep XXXXXXXX mostrará solo las líneas con el patrón XXXXXXXX .

EDITAR:

A partir de su comentario, parece que desea enumerar todas las líneas sin la unwanted_word . En ese caso todo lo que necesitas es:

grep -v ''unwanted_word'' file


Tengo un directorio con un montón de archivos. Quiero encontrar todos los archivos que NO contienen la cadena "speedup", por lo que usé con éxito el siguiente comando:

grep -iL speedup *


grep proporciona la opción ''-v'' o ''--invert-match'' para seleccionar líneas no coincidentes.

p.ej

grep -v ''unwanted_pattern'' file_name

Esto dará salida a todas las líneas del archivo nombre_archivo, que no tiene ''patrón_deshecho no deseado''.

Si está buscando el patrón en varios archivos dentro de una carpeta, puede usar la opción de búsqueda recursiva de la siguiente manera

grep -r ''wanted_pattern'' * | grep -v ''unwanted_pattern''

Aquí grep intentará enumerar todas las apariciones de ''wanted_pattern'' en todos los archivos dentro del directorio actual y lo pasará al segundo grep para filtrar el ''unwanted_pattern''. ''|'' - pipe le dirá al shell que conecte la salida estándar del programa izquierdo (grep -r ''wanted_pattern'' *) a la entrada estándar del programa derecho (grep -v ''unwanted_pattern'').