¿Qué es el comando Grep en Linux? ¿Por qué se usa y cómo funciona?

Si usas Linux para el trabajo de diario o para desarrollar e implementar software, debes haberte encontrado alguna vez con comando grep.

En este artículo explicativo, vamos a ver que es el comando grep y cómo funciona.

¿Qué es grep?

Grep es una utilidad de línea de comandos en sistemas Unix y Linux, que se utiliza para encontrar patrones de búsqueda en el contenido de un archivo determinado.

Su nombre inusual, grep, hace referencia a un acrónimo. O al menos esto es al menos parcialmente cierto, aunque depende de a quién le preguntes.

Según fuentes acreditadas, el nombre en realidad se deriva de un comando en un editor de texto UNIX denominado ed.

En el cual, la entrada g/re/p realiza una búsqueda global (g) de una expresión regular (re) y posteriormente, imprime (p de print -imprimir-) cualquier línea coincidente.

El comando grep hace lo que hicieron los comandos g/re/p en ese editor. Realiza una búsqueda global de una expresión regular y la imprime.

Eso sí, mucho más rápido que cualquier otra búsqueda de archivos de gran tamaño.

Esta es la narrativa oficial, pero también puedes encontrarte al comando descrito como G lobal R egular E xpression ( P rocessor | P arser | P rinter).

La interesante historia detrás de la creación de grep

Ken Thompson ha hecho algunas contribuciones increíbles a la informática. Ayudó a crear Unix, popularizó su enfoque modular y escribió muchos de sus programas, incluido grep.

Thompson creó grep para ayudar a uno de sus colegas en Bell Labs.

El objetivo de este científico era examinar los patrones lingüísticos para identificar a los autores de los Federalist Papers.

Esto era una colección de 85 artículos y ensayos anónimos redactados en defensa de la Constitución de los Estados Unidos, pero dado que estos artículos eran anónimos, el científico estaba tratando de identificar a los autores en función del patrón lingüístico.

El editor de texto original de Unix, ed, (también creado por Thompson) no era capaz de buscar en un cuerpo de texto demasiado grande por culpa de las limitaciones de hardware.

Entonces, Thompson transformó la función de búsqueda en una utilidad independiente, independiente del editor de ed.

Si lo piensas bien, eso significa que Alexander Hamilton técnicamente ayudó a crear grep.

¿Qué es una expresión regular?

Una expresión regular (o regex) se puede considerar como una especie de consulta de búsqueda.

Las expresiones regulares se utilizan para identificar, hacer coincidir o administrar el texto.

Sin embargo, Regex es capaz de mucho más que realizar búsquedas de palabras clave. Se puede utilizar para encontrar cualquier tipo de patrón imaginable.

Los patrones se pueden encontrar más fácilmente usando meta caracteres. Esos caracteres especiales que hacen que esta herramienta de búsqueda sea mucho más poderosa.

Cabe señalar que grep es solo una herramienta que usa expresiones regulares. Hay capacidades similares en toda la gama de herramientas, pero los metacaracteres y la sintaxis pueden variar.

Esto significa que es importante conocer las reglas para tu procesador de expresiones regulares en particular.

Un ejemplo práctico de grep: Coincidencia de números de teléfono

Esta herramienta puede resultar intimidante tanto para los novatos como para los usuarios más experimentados de Linux.

Desafortunadamente, incluso un patrón relativamente simple como un número de teléfono puede dar como resultado una cadena de expresiones regulares de aspecto aterrador.

Es bueno que sepas, que no existe la necesidad de entrar en pánico cuando veas expresiones como está.

Una vez que te familiarices con los conceptos básicos de las expresiones regulares, puedes abrir un nuevo mundo de posibilidades para tu día a día.

Crea un archivo llamado telefono.txt y anota 4 variaciones comunes del mismo número de teléfono.

Luego, vamos a usar grep para reconocer el patrón numérico sin importar el formato.

También agrega una línea que no se ajuste a la expresión regular, para usarlo como control. La línea final 555!123!1234 no es un patrón de número de teléfono estándar y la expresión grep no la devolverá.

El contenido de los archivos telefono.txt es:

rosepac@ciberninjas:~$ cat telefono.txt 
5551231234
555 123 1234
555-123-1234
(555)-123-1234
555!123!1234

Para “grep” los números de teléfono, vamos a escribir una expresión regular usando metacaracteres para aislar los datos relevantes e ignorar lo que no se necesita.

El comando completo se vería así:

rosepac@ciberninjas:~$ grep '\(([0-9]\{3\})\|[0-9]\{3\}\)[ -]\?[0-9]\{3\}[ -]\?[0-9]\{4\}' phone.txt

¿Se ve un poco intenso verdad? Vamos a dividirlo en partes para tener una mejor idea de lo que está sucediendo.

Comprender expresiones regulares, segmento a segmento

Primero separemos la sección del RegEx que busca el “código de área” en el número de teléfono. También se repite parcialmente un patrón similar para obtener el resto de los dígitos.

Es importante tener en cuenta que el código de área a veces se encapsula entre paréntesis, por lo que debes tenerlo en cuenta con la expresión que se muestra.

La lógica de toda la sección del código de área está encapsulada en un conjunto de llaves redondas con escapes.

Puedes ver que el código comienza con \( y termina con \) .

Cuando usas los corchetes [0-9] , estás haciendo saber a grep que está buscando un número entre 0 y 9.

De manera similar, podría usarlos para [a-z] y hacerlo coincidir con las letras del abecedario.

El número entre corchetes {3\} significa que el elemento entre llaves debe coincidir exactamente tres veces.

¿Sigues confundido? No te estreses. Vas a ver este ejemplo de varias maneras para que te sientas seguro de seguir adelante.

Intentemos ver la lógica de la sección del código de área en pseudocódigo aislando cada segmento de la expresión.

Pseudo-código del Código de Área RegEx

  • (\

  • (Número de 3 dígitos)

  • |

  • Número de 3 dígitos

  • \)

Con suerte, verlo así hace que la expresión regular sea más sencilla.

En un lenguaje sencillo, estás buscando números de 3 dígitos y cada dígito puede ser del 0 al 9, además, puede haber o no paréntesis alrededor del código de área.

Luego, esta la parte extraña al final de nuestra primera sección.

  • [-]\?

¿Qué significa esto? El símbolo \? “coincidencia con cero o uno del carácter anterior”.

Aquí, eso se refiere a lo que está entre los corchetes [ -] . En otras palabras, puede haber o no un guión después de los dígitos.

Código de AREA

Ahora, reconstruyamos el mismo bloque con el código real y luego, agreguemos las otras partes de la expresión.

  • (

  • ([0-9]{3})

  • |

  • [0-9]{3}

  • )

  • [-]\?

Prefijo

Para completar el patrón del número de teléfono, puedes reutilizar parte del código existente.

[0-9]\{3\}[ -]\?

No tienes que preocuparte por los paréntesis que rodean el prefijo, pero aún puedes tener o no - entre el prefijo y los dígitos de línea del número de teléfono.

Línea de números

La última sección del número de teléfono no requiere que busquemos ningún otro carácter, pero debes actualizar la expresión para reflejar el dígito adicional.

[0-9]\{4\}

Eso es todo. Ahora asegúrate de que la expresión esté entre comillas para minimizar los comportamientos inesperados.

Aquí tienes la expresión completa de nuevo

rosepac@ciberninjas:~$ grep '\(([0-9]\{3\})\|[0-9]\{3\}\)[ -]\?[0-9]\{3\}[ -]\?[0-9]\{4\}' telefono.txt

Consejo extra

Si deseas que sus resultados se destaquen, puedes agregarles el atributo --color=auto a tu comando.

También puede agregar eso a tu perfil de shell como un alias para que cada vez que escribas grep se ejecute como un archivo grep --color=auto .

Espero que ahora, ya seas capaz de comprender algo mejor el comando grep. Mostré solamente un ejemplo para poder explicar las cosas paso a paso.

Relacionado

15 Ejemplos del comando FIND en Linux

El comando de búsqueda (find) se utiliza para buscar archivos y directorios en la línea de comandos de Linux. Find es uno de los comandos más potentes y de mayor uso, es uno de los comandos más extensos con más de 50 opciones diferentes. Eso lo hace un poco confuso, especialmente cuando se combina con el comando exec o xargs. Es imposible que un administrador de ¡SEGUIR LEYENDO!

3 Razones por las que los técnicos deberían aprender Linux

Linux como Mac o Windows OS, es un sistema operativo. Un día se utilizó principalmente para servidores y no era una buena solución para los PC personales. La causa de eso era su interfaz de usuario que era difícil de entender para el usuario más común Sin embargo, los desarrolladores han estado mejorado continuamente el sistema de Linux durante la última década digital y ahora, es ¡SEGUIR LEYENDO!

6 Consejos para mejorar tu experiencia con Flatpak en Linux

If you love using Flatpak applications, here are a few tips, tools, and tweaks to make your Flatpak experience better and smoother.

¿Cómo actualizar de Fedora 35 a Fedora 36?

Red Hat lanzó recientemente una actualización de versión para la estación de trabajo Fedora, sin embargo, no puedes simplemente actualizar escribiendo sudo dnf update en la Terminal. En este artículo, echaremos un vistazo al nuevo Fedora 36 e intentaremos actualizar nuestra instalación de Fedora. Hay dos formas a través de las cuales puede actualizar su instalación, una es la forma gráfica y otra es a través ¡SEGUIR LEYENDO!

AppFlowy: Alternativa de código abierto a Notion

AppFlowy aims to be an open-source replacement to Notion, providing you with better privacy. Let us explore more about it.

Mejores Libros PDF de Programación y Tecnología GRATIS

Los Mejores Libros PDF Gratuitos de Informática. EL sitio perfecto para aprender a programar desde cero para principiantes con las mejores guías gratis. Esta es la mejor lista de libros de programación en PDF en español del mundo. Una completa biblioteca recopilada de cientos y cientos de libros en PDF que no encontrarás en ninguna parte más. Aquí, vas a encontrar libros enfocados hacía programadores. Sobre ¡SEGUIR LEYENDO!

BlendOS: una combinación de Arch Linux, Fedora Linux y Ubuntu

Del mantenedor de Ubuntu Unity y el entorno de escritorio de Unity, llega blendOS, una distribución de GNU/Linux que pretende ser la última distribución que usarás. BlendOS está aquí para ofrecerte "una combinación perfecta de todas las distribuciones de Linux" como su creador lo define. BlendOS se basa en Arch Linux y GNOME pero permite usar aplicaciones de otras distribuciones populares, como Fedora o Ubuntu. Esto ¡SEGUIR LEYENDO!

Deja un comentario