Ejemplos de comandos grep en Linux
Grep es un comando útil que le ayudará a buscar y encontrar rápidamente el contenido de los archivos.
"Todo es un archivo en Linux" y esa es la razón por la que la mayoría de los usuarios de Linux dedican una gran cantidad de tiempo a modificar el contenido del archivo.
Aquí es donde la importancia del comando grep juega un papel crucial al permitirle buscar y unir patrones dentro de archivos de texto u obtener un resultado.
Entonces, en este tutorial, lo guiaré a través de todos los elementos esenciales necesarios para aprender el comando grep:
La sintaxis básica y las opciones populares del comando
-
Ejemplos prácticos del comando
Preguntas de práctica para el comando grep
A continuación se explica cómo utilizar el comando grep
Para utilizar el comando grep, es importante conocer la sintaxis.
Aquí está la sintaxis básica del comando grep:
grep [OPTIONS] PATTERN <Filename>
Aquí,
[OPCIONES]
: usando el conjunto de opciones dado, puede cambiar el comportamiento predeterminado del comando grep, como por ejemplo usar-i
para habilitar la búsqueda que no distingue entre mayúsculas y minúsculas.PATTERN
: aquí es donde especifica el texto que busca en el archivo o en la salida del comando. También puede ser una expresión regular para patrones más complejos.: aquí especifica el archivo en el que desea buscar y, si no especifica ningún archivo, buscará desde la entrada estándar.
Ahora, echemos un vistazo a algunas opciones utilizadas comúnmente con el comando grep:
-i
Ignora la distinción entre mayúsculas y minúsculas en la búsqueda.
-v
-
Imprime líneas que no coinciden con el patrón.
-n
Muestra el número de línea de cada línea coincidente.
-w
Coincide únicamente con palabras completas, no con partes de palabras.
-c
Cuenta el número de líneas coincidentes, no imprime las líneas.
-r
Busca en directorios de forma recursiva.
-A n
Imprime n líneas después de cada línea coincidente.
-B n
Imprime n líneas antes de cada línea coincidente.
-C n
Imprime n líneas antes y después de cada línea coincidente.
-f Filename
Lee patrones de búsqueda de un archivo, uno por línea.
-o
Imprime sólo la parte coincidente de la línea.
Quizás se pregunte: ¿qué sucede cuando usa el comando grep sin ninguna opción? Bueno, simplemente imprime las líneas que contienen el patrón.
Por ejemplo, aquí quiero buscar la palabra clave error
dentro del archivo llamado error.log
y, sin ninguna opción adicional, me dio este resultado:
¿Viste eso? Resalta el patrón encontrado y también imprime las líneas que contienen el patrón.
Para que este tutorial sea fácil de seguir, usaré un archivo de muestra llamado error.log
que incluye las siguientes líneas:
This is a log file with various messages.
An error occurred at 10:00 AM.
The system encountered an unexpected issue.
Everything is working normally now.
Another error message at 11:30 AM.
Warning: Please check disk usage.
Log closed at 12:00 PM
Ejemplos prácticos del comando grep
En esta sección, cubro varios ejemplos del comando grep para que pueda tener una mejor idea de cómo utilizar el comando grep.
1. Búsqueda que no distingue entre mayúsculas y minúsculas
De forma predeterminada, los patrones del comando grep distinguen entre mayúsculas y minúsculas y, en su mayor parte, funciona bien, pero es posible que desee desactivar la distinción entre mayúsculas y minúsculas.
Para hacerlo, puede utilizar el indicador -i
como se muestra aquí:
grep -i PATTERN Filename
Para demostrar esto, usaré ERROR
como patrón de búsqueda y mostrará patrones coincidentes independientemente de la distinción entre mayúsculas y minúsculas:
grep -i ERROR error.log
2. Mostrar n
líneas antes y después de las líneas coincidentes
De forma predeterminada, el comando grep solo imprime las líneas coincidentes, pero a veces desea el contexto de las líneas coincidentes. Entonces imprimes las líneas antes y después de las líneas coincidentes.
Imprima n
líneas antes de las líneas coincidentes
Para imprimir n números de líneas antes de hacer coincidir las líneas, use el indicador -B
y especifique el número de líneas a imprimir como se muestra aquí:
grep -B <number_of_lines> PATTERN Filename
Por ejemplo, aquí imprimí una línea antes de cada línea coincidente:
grep -B 1 error error.log
Imprima n
líneas después de las líneas coincidentes
Para imprimir el número n de líneas después de las líneas coincidentes, utilice el indicador -A
y especifique el número de líneas como se muestra aquí:
grep -A <number_of_lines> PATTERN Filename
Si quiero imprimir una línea después de las líneas coincidentes, usaré lo siguiente:
grep -A 1 error error.log
Imprima n
líneas antes y después de líneas coincidentes
Si desea imprimir líneas antes y después, utilice la bandera -C
y especifique el número de líneas a imprimir como se muestra aquí:
grep -C <number_of_lines> PATTERN Filename
Digamos que quiero mostrar 1 línea antes y 1 línea después de la línea del patrón coincidente, entonces usaré lo siguiente:
grep -C 1 error error.log
3. Mostrar líneas que no coinciden con el patrón.
En su mayor parte, utilizará el comando grep para hacer coincidir patrones, pero también le permite invertir los resultados de la búsqueda.
En términos simples, usted especifica el término de búsqueda e imprimirá líneas que no coinciden con el patrón dado y, para ese propósito, usa el indicador -v
como se muestra aquí:
grep -v PATTERN Filename
Por ejemplo, si quiero imprimir cada línea que no contiene el término error
, usaré lo siguiente:
grep -v error error.log
4. Muestra el número de líneas coincidentes.
Para mostrar el número de líneas coincidentes, todo lo que tiene que hacer es usar el indicador -n
como se muestra:
grep -n PATTERN Filename
5. Muestra el número total de resultados coincidentes.
Si desea conocer el número de resultados coincidentes, puede utilizar el indicador -c
como se muestra:
grep -c PATTERN Filename
Por ejemplo, aquí quería saber cuántas veces se menciona el término error
en el archivo error.log
, así que utilicé el siguiente comando:
grep -c error error.log
6. Busque un patrón en varios archivos.
Si desea buscar un patrón en varios archivos, todo lo que tiene que hacer es agregar varios archivos para buscar, como se muestra aquí:
grep PATTERN File1 File2
Por ejemplo, aquí, busqué la cadena error
en dos archivos: error.log
y error.txt
y me dio el siguiente resultado :
grep error error.log error.txt
7. Patrón de búsqueda de cada archivo en el directorio.
Si desea buscar un patrón específico de cada archivo presente en el directorio, puede usar el comando grep de forma recursiva y buscará el patrón dado en cada archivo presente en ese directorio específico.
Para habilitar la búsqueda recursiva, utilice el indicador -r
como se muestra:
grep -r PATTERN <Directory or path to directory>
Por ejemplo, aquí he buscado la cadena error
en el directorio actual:
grep -r error .
8. Busca la palabra exacta
De forma predeterminada, el comando grep imprimirá todos los patrones coincidentes, que no es lo que siempre desea. ¿Suena extraño? Permítame explicarle.
Supongamos que desea buscar el término Orange
pero si el archivo específico también contiene el término Oranges
entonces la línea que contiene el término Oranges
también será se muestra como salida.
Para superar este problema, puede utilizar la opción -w
y especificar el patrón:
grep -w PATTERN Filename
Por ejemplo, aquí tengo la intención de encontrar el término err
, así que usaré el indicador -w
y también te mostraré la diferencia entre lo que sucede cuando no usas él.
grep -w err error.log
Cuando utilicé el indicador -w
para encontrar la cadena err
, no arrojó resultados, ya que no existe.
Pero en el segundo intento en el que eliminé el indicador -w
, arrojó dos resultados que mostraban contenido donde el patrón de cadena es parte de otra cadena (no separada).
9. Utilice el patrón de expresiones regulares para la búsqueda avanzada
Si la búsqueda normal no le hace justicia, puede utilizar el patrón de expresiones regulares (secuencia de caracteres) para tener un mejor control sobre su búsqueda. Puedes usar el indicador -e
para usar el patrón de expresión regular, mientras que -E
te permite usar la expresión regular extendida:
grep -e/-E PATTERN Filename
Por ejemplo, aquí he usado la expresión regular extendida para encontrar dos vocales usadas juntas en el archivo:
grep -e '[aeiouAEIOU]{2}' error.log
Lectura sugerida 📖
10. Especifique múltiples patrones usando el operador O
Puede utilizar el operador OR para especificar múltiples patrones, lo cual es muy útil cuando desea buscar múltiples patrones de manera eficiente.
Para especificar varios patrones, utilice el operador O (|) de la siguiente manera:
grep 'PATTERN_1\|PATTERN_2' Filename
Digamos que deseo buscar dos patrones: error
y Por favor
, entonces usaré lo siguiente:
grep 'error\|Please' error.log
Preguntas de práctica 📓
Practicar es la mejor manera de aprender y es por eso que estoy a punto de compartir algunas preguntas de práctica para el comando grep.
Puedes utilizar el archivo error.log
que mencioné al principio de esta guía para resolver las siguientes preguntas:
Busque la cadena
error
de cada archivo presente en su directorio de trabajo.Busque líneas que no contengan el término
éxito
.Busque líneas en un archivo que contengan
error
oissue
.Encuentre el término
log
deshabilitando la búsqueda que distingue entre mayúsculas y minúsculas y redirigiendo la salida a un archivo.¿Cómo se imprime solo los 2 últimos resultados ignorando todo lo demás? (Pista: utiliza el comando tail)
Si descubre alguna dificultad para resolver los problemas anteriores, comuníquese con nosotros a través de los comentarios o publique su consulta en nuestro foro comunitario.
Puede descargar una hoja de referencia del comando grep para obtener más ejemplos e información:
¿Es usted un usuario avanzado? Prueba ripgrep
El comando ripgrep hace todo lo que hace el comando grep, pero tiene algunos beneficios adicionales como rendimiento y características que incluyen la capacidad de buscar dentro del archivo zip.
¿Suena bien? A continuación se explica cómo instalar y utilizar ripgrep en Linux:
Además, si es nuevo en Linux, le sugiero que consulte también nuestro tutorial de comandos para principiantes.
💬Comparte tu opinión sobre el comando, tu experiencia con él y ¿qué prefieres como alternativa a grep?