Redes y Sistemas

Grep: Qué es y cómo usarlo

Te explicamos qué es el comando Grep y la gran utilidad que nos ofrece, además de cómo se utiliza y algunos ejemplos de uso de Grep en Linux.

Publicado el 28 de Septiembre de 2020
Compartir

Qué es Grep

Grep es una de esas utilidades imprescindibles a tener muy en cuenta. Aunque podemos estar más acostumbrados a usar la interfaz gráfica de nuestro sistema, existen situaciones en las que no podemos permitirnos su uso, cómo por ejemplo cuando accedemos a un servidor Linux a través del terminal. Si no sabes de lo que te hablo, no te preocupes, esto es algo que veremos en nuestro curso para aprender Linux desde cero.

Este pequeño programa tiene como función la de encontrar patrones coincidentes. Es decir, cumpliendo con la filosofía UNIX, encontrar todo aquello que queramos buscar de la manera más eficiente posible. Grep en Linux es exactamente igual y capaz que sus "hermanos" UNIX o BSD. Entre sus características se encuentra su capacidad de poder procesar casi cualquier texto procesando la salida de otros comandos o buscando los archivos directamente.

Para lograrlo hace uso de una variante del algoritmo Boyer-Moore. Un algoritmo ideado para procesar cadenas de texto en un tiempo de ejecución reducido pues no precisa comprobar cada carácter de la cadena sino que se centra en buscar el patrón coincidente más aproximado utilizando para ello expresiones regulares para definir la consulta y descartar tantas posiciones del texto no coincidentes como sean posibles en una única pasada.

La utilidad es tan flexible que permite el manejo de archivos tanto en el directorio raíz, como de manera recursiva dentro de subdirectorios.

Conviértete en SysAdmin
Domina las tecnologías más demandadas. Accede a cursos, talleres y laboratorios prácticos de Linux, VMware, Tomcat, IPv6 y más.
Comenzar gratis ahora

La sintaxis de ejecución de grep es muy simple y sigue la siguiente estructura:

grep [opciones] patrón [fichero]

  • grep: el comando para llamar a la utilidad

  • [opciones]: opciones que actúan como modificadores

  • patrón: el patrón que queremos encontrar con la búsqueda

  • [fichero]: el archivo en el que realizamos la búsqueda

Y si tienes dudas sobre qué opciones usar, es posible invocar a una guía de ayuda mediante el siguiente comando:

grep --help

Esto nos mostrará un buen número de opciones, siendo las más comunes:

-i: no hacer distinción entre mayúsculas y minúsculas.

-c: mostrará el número de coincidencias

-r: habilita la búsqueda recursiva dentro del directorio actual

-n: busca líneas y precede cada línea coincidente con un número de línea.

-o: imprime solo la parte correspondiente del texto

-v: con esta opción, se nos muestran las líneas que no coinciden con el patrón que hemos buscado

Expresiones regulares que podemos utilizar

\ : Ignora el significado original de los caracteres especiales en expresiones regulares.

^ : Coincide con el comienzo de la expresión regular.

$ : Coincide con el final de la expresión regular.

< : Comience con una línea que coincida con la expresión regular.

: Al final de la línea que coincide con la expresión regular.

[] : Un solo carácter, como [A] significa que A cumple con los requisitos.

[-] : El rango, como [A-Z], es decir, A, B, C y Z cumplen todos los requisitos.

. : Todos los caracteres individuales.

  • : Hay caracteres, la longitud puede ser 0.

Imagen 0 en Grep: Qué es y cómo usarlo

Ejemplos de uso

Quizá la mejor forma de descubrir el potencial que ofrece grep pasa por probarlo nosotros mismos. Disponemos de un curso de Shell en Linux en donde aprenderás a manejar grep como un maestro ninja pero como introducción creo que es mejor que presentar algunos ejemplos y así ir abriendo boca:

Ejemplo 1

Por ejemplo, vamos a buscar dentro de la carpeta descargas cualquier imagen jpg disponible:

ls ~/Descargas | grep .jpg

De esta manera grep tomará la salida del comando ls y enumerará todos resaltando la extensión ".jpg".

Ejemplo 2

Imagina que tenemos que buscar el texto "me gusta formarme en Openwebinars" en un documento .txt. Entonces podemos usar el comando grep como se muestra a continuación.

grep "me gusta formarme en Openwebinars" fichero.txt

Después de ejecutar la línea anterior, grep imprimirá las líneas de texto que incluyen el texto "me gusta formarme en Openwebinars".

Ejemplo 3

Retomando el primer ejemplo. Imaginemos que queremos conocer el número de coincidencias para nuestro patrón de búsqueda. Para ello usaremos la opción -c siguiendo el siguiente ejemplo:

ls | grep -c "nombrearchivoa_encontrar"

Ejemplo 4: Trabajando con Expresiones regulares.

Antes hacía referencia a que podemos usar expresiones regulares para "afinar" nuestros resultados de búsqueda. Grep permite su utilización así que vamos a ha mostrar algunos ejemplos de uso de grep con expresiones regulares:

  • Coincidir todas las líneas que comiencen con "hola".\ grep "^hola" fichero.txt

  • Coincidir todas las líneas que terminan con "listo".\ grep "listo$" fichero.txt

  • Coincidir con todas las líneas que contienen cualquiera de las letras "a", "b", "c", "d" o "e".\ grep "[a-e]" fichero.txt

  • Coincidir con todas las líneas que no contienen una vocal

grep "[^aeiou]" fichero.txt
  • Coincidir todas las líneas que comiencen con un dígito después de cero o más espacios.
grep "*[0-9]" fichero.txt

Ejemplos con operadores lógicos OR, AND y NOT

En grep, tenemos opciones equivalentes a los operadores OR y NOT. No hay grep AND operador. Pero puedes simular Y usar patrones. Los ejemplos que se mencionan a continuación lo ayudarán a comprender cómo usar OR, AND y NOT en el comando grep de Linux.

  • Operador OR con Grep: Podemos utilizar varios métodos para trabajar con el operador OR en grep:

  • Grep O usando \| Si usamos el comando grep sin ninguna opción, deberíamos usar \| para separar varios patrones para la condición o.\ grep 'patrón1\|patrón2' fichero.txt

  • La opción grep -E es para expresiones regulares extendidas.\ Si usamos el comando grep con la opción -E, necesitamos usar | para separar varios patrones para la condición o.\ grep -E 'patrón1|patrón2' fichero.txt

  • Usando el operador AND.\ No existe como tal el operador AND en grep. Pero, puede simularse usando la opción grep -E:

grep -E 'patrón1.*patrón2' fichero.txt
grep -E 'patrón1.patrón2|patrón2.patrón1' fichero.txt
grep -E 'patrón1' fichero.txt | grep -E 'patrón2'
  • Usando el operador NOT.\ Usando grep -v puede simularse la condición NOT. La opción -v sirve para definir una coincidencia invertida, es decir, coincide con todas las líneas excepto el patrón dado.
grep -v 'patrón1' fichero.txt

Asegura la infraestructura tecnológica de tu empresa con el menor esfuerzo
Cursos, talleres y laboratorios actualizados para que tus equipos dominen las últimas herramientas para gestionar servidores y aplicaciones.
Solicitar más información

Cómo hacer que grep busque múltiples cadenas y patrones

Hasta el momento en este artículo hemos visto cómo realizar búsquedas simples de cadenas de texto usando grep pero grep es tan flexible que permite ser utilizado para buscar de manera simultánea múltiples cadenas y patrones. Esto es especialmente útil cuando ya nos metemos en faena con el bash scripting.

Para ello utilizaremos el símbolo | (pleca o barra vertical) que actúa como operador OR (alternancia o alternativa). Esto nos permite definir las coincidencias alcanzables. Ahora bien, cabe comentar que este operador tiene la prioridad más baja de todos los operadores de expresión comunes.

La sintaxis para ser usada con grep definiendo una serie de patrones sería la siguiente:

grep 'patrón1|patrón2' fichero.txt

Por ejemplo vamos a buscar todas las apariciones de los términos "error, critical, warning" en un log de sistema:

grep 'warning|error|critical' /var/log/nginx/error.log

Nota: si la cadena que estamos buscando incluye espacios, es preferible escribirla entre comillas dobles.

Para conocer más sobre el potencial de grep recomendaría el que pudieras visitar nuestro curso nuestro curso de bash scripting y automatización de procesos para más información.

Y hasta aquí nuestro artículo de hoy. Confío que sea de utilidad y os haya gustado. No olvidéis dejar vuestro comentario para cualquier duda y compartir a través de vuestras redes sociales.


Compartir este post

También te puede interesar...

Tecnología

Qué es Linux: Todo lo que necesitas saber

12 Agosto 2019 Angel Robledano
Artículos
Ver todos