Comando Grep en Linux/UNIX

¿Qué es Grep?

Grep, abreviatura de “global regular expression print”, es un comando utilizado para buscar y hacer coincidir patrones de texto en archivos que contienen expresiones regulares. Además, el comando viene preinstalado en todas las distribuciones de Linux. En esta guía, examinaremos los usos más comunes del comando grep, junto con casos de uso populares.

Comando Grep en Linux

El comando Grep se puede utilizar para encontrar o buscar una expresión regular o una cadena en un archivo de texto. Para demostrar esto, creemos un archivo de texto welcome.txt y agreguemos algún contenido como se muestra.

Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.

¡Genial! Ahora estamos listos para realizar algunos comandos grep y manipular la salida para obtener los resultados deseados. Para buscar una cadena en un archivo, ejecuta el siguiente comando Sintaxis

$ grep "string" file name

O

$ filename grep "string"

Ejemplo:

$ grep "Linux" welcome.txt

Resultado Como puedes ver, grep no solo ha buscado y coincidido con la cadena “Linux”, sino que también ha impreso las líneas en las que aparece la cadena. Si el archivo está ubicado en una ruta diferente, asegúrate de especificar la ruta del archivo como se muestra a continuación.

$ grep "string" /path/to/file

Colorizando los resultados de Grep usando la opción –color

Si estás trabajando en un sistema que no muestra la cadena de búsqueda o patrón en un color diferente al resto del texto, utiliza la opción --color para resaltar tus resultados. Ejemplo

$ grep --color "free and opensource" welcome.txt 

Salida

Buscando una cadena de forma recursiva en todos los directorios

Si deseas buscar una cadena en tu directorio actual y en todos los subdirectorios, utiliza la bandera -r como se muestra

$ grep -r "string-name" *

Por ejemplo

$ grep -r "linux" *

Salida

Ignorando la sensibilidad a mayúsculas y minúsculas

En el ejemplo anterior, nuestros resultados de búsqueda nos dieron lo que queríamos porque la cadena “Linux” estaba especificada en mayúsculas y también existe en el archivo en mayúsculas. Ahora intentemos buscar la cadena en minúsculas.

$ grep "linux" file name

¡Nada en la salida, ¿verdad? Esto se debe a que la búsqueda no pudo encontrar y coincidir con la cadena “linux” ya que la primera letra está en minúsculas. Para ignorar la sensibilidad a mayúsculas y minúsculas, usa la bandera -i y ejecuta el siguiente comando

$ grep -i "linux" welcome.txt

Resultado ¡Increíble, ¿no? La opción -i se utiliza normalmente para mostrar cadenas independientemente de su sensibilidad a mayúsculas y minúsculas.

Contar las líneas donde las cadenas coinciden con la opción -c

Para contar el número total de líneas donde aparece o reside el patrón de cadena, ejecuta el siguiente comando

$ grep -c "Linux" welcome.txt

Resultado

Usando Grep para invertir la salida

Para invertir la salida de Grep, usa la bandera -v. La opción -v le indica a grep que imprima todas las líneas que no contienen o coinciden con la expresión. La opción -v le dice a grep que invierta su salida, lo que significa que en lugar de imprimir líneas coincidentes, haga lo contrario e imprima todas las líneas que no coinciden con la expresión. Volviendo a nuestro archivo, veamos los números de línea como se muestra. Presiona ESC en el editor Vim, escribe dos puntos seguido por

 set nu

Luego, presiona Enter Salida Ahora, para mostrar las líneas que no contienen la cadena “Linux”, ejecuta

$ grep -v "Linux" welcome.txt

Salida Como puedes ver, grep ha mostrado las líneas que no contienen el patrón de búsqueda.

Numerar las líneas que contienen el patrón de búsqueda con la opción -n

Para numerar las líneas donde se coincide el patrón de cadena, usa la opción -n como se muestra

$ grep -n "Linux" welcome.txt

Salida

Busque la palabra exacta coincidente usando la opción -w

Pasar entonces la bandera -w buscará la línea que contenga la palabra exacta coincidente como se muestra

$ grep -w "opensource" welcome.txt

Salida Sin embargo, si intenta

$ grep -w "open" welcome.txt

NO se devolverán resultados porque no estamos buscando un patrón sino una palabra exacta!

Uso de tuberías con grep

El comando grep se puede usar junto con tuberías para obtener una salida distinta. Por ejemplo, si desea saber si un paquete específico está instalado en el sistema Ubuntu, ejecute

$ dpkg -L | grep "package-name"

Por ejemplo, para averiguar si OpenSSH ha sido instalado en su sistema, pase el comando dpkg -l a grep como se muestra

$ dpkg -L | grep -i "openssh"

Salida

Mostrando el número de líneas antes o después de un patrón de búsqueda usando tuberías

Puedes usar las opciones -A o -B para mostrar el número de líneas que preceden o siguen al texto de búsqueda. La bandera -A indica las líneas que siguen al texto de búsqueda, mientras que -B imprime el resultado que aparece antes del texto de búsqueda. Por ejemplo

$ ifconfig | grep -A 4 ens3

Este comando muestra la línea que contiene la cadena más 4 líneas de texto después de la cadena ens en el comando ifconfig. Salida Por otro lado, en el ejemplo siguiente, el uso de la opción -B mostrará la línea que contiene la cadena de búsqueda más 3 líneas de texto antes de la cadena ether en el comando ifconfig. Salida

$ ifconfig | grep -B 4 ether

Usando grep con REGEX – expresiones regulares

El término REGEX es un acrónimo de REGular EXpression. Un REGEX es una secuencia de caracteres que se utiliza para coincidir con un patrón. A continuación, hay algunos ejemplos:

^      Matches characters at the beginning of a line
$      Matches characters at the end of a line
"."    Matches any character
[a-z]  Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets

Ejemplo Para imprimir líneas que comienzan con un cierto carácter, la sintaxis es;

grep ^character file_name

Por ejemplo, para mostrar las líneas que comienzan con la letra “d” en nuestro archivo welcome.txt, ejecutaríamos

$ grep ^d welcome.txt 

Salida Para mostrar líneas que terminan con la letra ‘x’, ejecutar

$ grep x$ welcome.txt

Salida

Obtener ayuda con más opciones de Grep

Si necesitas aprender más sobre el uso del comando Grep, ejecuta el siguiente comando para obtener un adelanto de otras banderas u opciones que puedes usar junto con el comando.

$ grep --help

Salida de muestra Agradecemos tu tiempo al revisar este tutorial. Siéntete libre de probar los comandos y hacernos saber cómo te fue.

Source:
https://www.digitalocean.com/community/tutorials/grep-command-in-linux-unix