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"