
grep
es una poderosa herramienta de línea de comandos que se usa para buscar líneas que coincidan con una expresión regular en uno o más archivos de entrada y escribe cada línea coincidente en la salida estándar.
En este artículo, le mostraremos cómo excluir una o varias palabras, patrones o directorios al buscar con grep
.
Excluir palabras y patrones #
Para mostrar solo las líneas que no coinciden con un patrón de búsqueda, use -v
( o --invert-match
) opción.
Por ejemplo, para imprimir las líneas que no contienen la cadena nologin
usarías:
grep -wv nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
git:x:994:994:git daemon user:/:/usr/bin/git-shell
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
El -w
opción le dice a grep
para devolver solo aquellas líneas donde la cadena especificada es una palabra completa (entre caracteres que no son palabras).
Por defecto, grep
distingue entre mayúsculas y minúsculas. Esto significa que los caracteres en mayúsculas y minúsculas se tratan como distintos. Para ignorar el caso al buscar, invoque grep
con el -i
opción.
Si la cadena de búsqueda incluye espacios, debe encerrarlo entre comillas simples o dobles.
Para especificar dos o más patrones de búsqueda, use -e
opción:
grep -wv -e nologin -e bash /etc/passwd
Puedes usar -e
opción tantas veces como necesites.
Otra opción para excluir múltiples patrones de búsqueda es unir los patrones usando el operador OR |
.
El siguiente ejemplo imprime las líneas que no contienen las cadenas nologin
o bash
:
grep -wv 'nologin\|bash' /etc/passwd
GNU grep
admite tres sintaxis de expresiones regulares, básica, extendida y compatible con Perl. Por defecto, grep
interpreta el patrón como una expresión regular básica donde los metacaracteres como |
pierden su significado especial y debe usar sus versiones con barra invertida.
Si usa la opción de expresión regular extendida -E
, entonces el operador |
no se debe escapar, como se muestra a continuación:
grep -Ewv 'nologin|bash' /etc/passwd
Puede especificar diferentes coincidencias posibles que pueden ser cadenas literales o conjuntos de expresiones. En el siguiente ejemplo, las líneas donde la cadena games
ocurren al principio de una línea están excluidos:
grep -v "^games" file.txt
La salida de un comando se puede filtrar con grep
a través de la tubería, y solo las líneas que coincidan con un patrón determinado se imprimirán en el terminal.
Por ejemplo, para imprimir todos los procesos en ejecución en su sistema, excepto aquellos que se ejecutan como usuario "raíz", puede filtrar la salida de ps
comando:
ps -ef | grep -wv root
Excluir directorios y archivos #
A veces, al realizar una búsqueda recursiva con -r
o -R
opciones, es posible que desee excluir directorios específicos del resultado de la búsqueda.
-r
o -R
opciones es que cuando se invoca grep con mayúsculas R
seguirá todos los enlaces simbólicos
Para excluir un directorio de la búsqueda, use --exclude-dir
opción. La ruta al directorio excluido es relativa al directorio de búsqueda.
Aquí hay un ejemplo que muestra cómo buscar la cadena linuxize
en todos los archivos dentro de /etc
, excluyendo /etc/pki
directorio:
grep -R --exclude-dir=pki linuxize /etc
Para excluir varios directorios, encierre los directorios excluidos entre corchetes y sepárelos con comas sin espacios.
Por ejemplo, para encontrar archivos que contengan la cadena 'gnu' en su sistema Linux excluyendo el proc
, boot
y sys
directorios que ejecutaría:
grep -r --exclude-dir={proc,boot,sys} gnu /
Al utilizar la coincidencia de comodines, puede excluir archivos cuyo nombre base coincida con el GLOB especificado en --exclude
opción.
En el siguiente ejemplo, estamos buscando en todos los archivos en el directorio de trabajo actual la cadena linuxize
, excluyendo los archivos que terminan en .png
y .jpg
directorio:
grep -rl --exclude=*.{png,jpg} linuxize *
Conclusión #
El grep
El comando le permite excluir patrones y directorios al buscar archivos.