Grep, Busqueda de Patrones en archivos

publicado a la‎(s)‎ 17 jun. 2014 21:18 por Juan Jose Ramirez Lama   [ actualizado el 5 ene. 2015 6:19 ]

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"
Comments