Grep, Busqueda de Patrones en archivos

Grep es un comando avanzado de búsqueda, busca en archivos aquellas lineas que coincidan con un patrón de búsqueda.

$ grep [-Opciones] "patronDeBusqueda" [/ruta/] archivo

Se pueden definir expresiones regulares para buscar patrones, compuestos por símbolos especiales que son:

^ Inicio de línea

grep -e "^juaramir" /etc/passwd

Busca todas las líneas que empiecen por la palabra juaramir

Fin de línea

grep "/bin/bash$" /etc/passwd

Busca todas las líneas que terminen con /bin/bash

  • . Cualquier carácter en esa posición

  • [] Cualquier carácter en los corchetes de esa posición

  • [^ Lo contrario a lo que pongas dentro

  • [comando-comandoN] Rango de valores

  • * Cero o más repeticiones del carácter anterior

  • ? Ó cero o una repetición del carácter anterior

  • + Una o más repeticiones del carácter anterior

  • {n} Se repite un n veces exactamente del carácter anterior

  • {n,m} Se repite un n veces exactamente pero que no supere las m veces

  • ( caracter1 | caracterN ) O pararece uno o otro

Expresiones Regulares Extendidas

Una expresión regular es donde pueden aparecer expresiones identificativas numéricamente, van encerradas entre (expresión) y se identifican por un número de forma consecutiva según aparecen pudiéndose hacer referencia a ellas por un numero.


grep -E “^([Rr]oot)|(alumno.*):.:(\1|\2):.*” /etc/passwd


Si ves me puedo referir a ellas con un \1 sugiriendo que es ([Rr]oot) y \2 (alumno.*) con lo cual se hace mucho más corta la expresión de grandes búsquedas.


Opciones de Comandos grep

-e Expresión regular sencilla


-E Expresión regular extendida


-c “counter” Te dice el número de filas que cuenta pero no muestra lo que encuentra


-v “verbose” Te muestra lo encontrado a lo que has puesto o que no coincida con el patrón de búsqueda de la expresión regular


-A nº “after n-lines” Te muestra las n-lineas de antes de encontrar lo que pides


-B nº “before n-lines” Te muestra la n-lineas de después de encontrar lo que pides

grep -A 5 -e "^title.*" /boot/grub/menu.lst

title Ubuntu 7.10, kernel 2.6.22-14-generic

root (hd0,1)

kernel /boot/vmlinuz-2.6.22-14-generic root=UUID=5fe3e9b1-d486-4e1e-a269-7d1834282023 ro quiet splash

initrd /boot/initrd.img-2.6.22-14-generic

quiet

GREP con COLOR

Si queremos que estos resultados coincidentes se resalten en color, podemos hacerlo, exportando antes la siguiente variable:

export GREP_OPTIONS='--color=always'

Ahora es mas facil localizar esas cadenas en el conjunto de resultados devueltos.

cat archivo | grep "cadena_a_buscar"