Aprende leyendo en orden

Búsqueda de texto — grep

Aprende los fundamentos de encontrar líneas que contengan una cadena, más cuándo usar -i para ignorar mayúsculas, -n para números de línea y -r para búsqueda recursiva — todo práctico en una terminal del navegador.

Buscar una cadena — grep

grep es el comando que extrae y muestra solo las líneas de un archivo que contienen una cadena determinada.

Úsalo como grep cadena-de-búsqueda nombre_archivo y, si hay líneas coincidentes, se imprimen en pantalla tal cual.

Úsalo para encontrar solo las líneas que necesitas dentro de un log grande.

grep extrae solo las líneas coincidentes
applebananacherrygrep banana fruits.txtmuestra solo elbanana coincidenteotras líneasno aparecen
grep extrae solo las líneas que contienen la cadena indicada y no emite el resto.
echo 'error: disk full' > log.txt   # crear línea 1
echo 'info: started' >> log.txt     # añadir
echo 'error: timeout' >> log.txt    # añadir
grep error log.txt                  # las 2 líneas que contienen error
grep info log.txt                   # la 1 línea que contiene info

① Crea la línea 1 con echo 'error: disk full' > log.txt, luego añade con echo 'info: started' >> log.txt y echo 'error: timeout' >> log.txt para hacer un archivo material de 3 líneas.

② Usa grep para mostrar solo las líneas que contienen error de log.txt.

③ Confirma que cada línea mostrada contiene error. (Ejecútalo correctamente y aparecerá una explicación.)

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

Ignorar mayúsculas — -i / Números de línea — -n

grep distingue entre mayúsculas y minúsculas.

Añade -i para buscar sin esa distinción, así puedes capturar tanto Error como error.

Añade -n y el número de línea se muestra delante de cada línea coincidente, para que sepas dónde está en el archivo.

-i y -n pueden combinarse y aplicarse a la vez, como grep -in error app.txt.

OpciónSignificadoEjemplo
-iNo distinguir mayúsculas y minúsculasgrep -i error log.txt
-nAñadir un número de línea delante de cada coincidenciagrep -n error log.txt
-vMostrar las líneas que no coincidengrep -v info log.txt
-rBuscar en un directorio de forma recursivagrep -r TODO src
echo 'Error in disk' > app.txt   # crear línea 1
echo 'error in app' >> app.txt   # añadir
echo 'ok' >> app.txt             # añadir
grep -i error app.txt            # las 2 líneas Error y error
grep -n error app.txt            # 2:error in app (con número de línea)

① Crea la línea 1 con echo 'Error in disk' > app.txt, luego añade con echo 'error in app' >> app.txt y echo 'ok' >> app.txt para hacer un material con mayúsculas mezcladas.

② Primero busca error con grep y la opción que ignora mayúsculas y confirma que la línea con Error también aparece.

③ Luego ejecuta la misma búsqueda con la opción que muestra números de línea y confirma que aparece un número de línea delante de cada coincidencia.

Linux console
0 / 5 completado(s)
Loading Linux Terminal...

Excluir las líneas no coincidentes — -v

Añade -v y grep muestra las líneas que no contienen la cadena indicada.

Mientras que grep normal conserva las líneas coincidentes, -v elimina las líneas coincidentes y emite el resto.

Úsalo cuando quieras leer un log con las líneas innecesarias (como info o debug) eliminadas.

grep -v conserva las líneas no coincidentes
error: disk fullinfo: startederror: timeoutgrep -v info log.txtlíneas con infose excluyenmuestra las 2 líneaserror restantes
-v excluye las líneas que contienen la cadena indicada y muestra solo el resto.
echo 'error: disk full' > log.txt   # crear línea 1
echo 'info: started' >> log.txt     # añadir
echo 'error: timeout' >> log.txt    # añadir
grep -v info log.txt                # las 2 líneas que no contienen info

① Crea la línea 1 con echo 'error: disk full' > log.txt, luego añade con echo 'info: started' >> log.txt y echo 'error: timeout' >> log.txt para hacer un archivo material de 3 líneas.

② Usa grep con la opción que conserva las líneas no coincidentes para mostrar solo las líneas de log.txt que no contengan info.

③ Confirma que las líneas mostradas son las 2 líneas de error y que la línea de info ha desaparecido.

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

Buscar en un directorio recursivamente — -r

Cuando quieres buscar no solo en un archivo sino en todos los archivos bajo un directorio, añade -r y pasa un directorio en lugar de un nombre de archivo.

Recorre los subdirectorios de forma recursiva y muestra las líneas coincidentes en la forma nombre_archivo:línea.

grep -r recorre un directorio recursivamente
grep -r TODO srcsrc/src/a.txtTODO: fix latersrc/sub/src/sub/b.txtTODO: review
grep -r parte del src que pasas y desciende al subdirectorio src/sub para buscar en todos los archivos.
mkdir -p src/sub                       # crear el directorio material
echo 'TODO: fix later' > src/a.txt     # 1 archivo en el directorio padre
echo 'TODO: review' > src/sub/b.txt    # 1 archivo en el subdirectorio
grep -r TODO src                       # buscar recursivamente bajo src

① Crea un árbol material con un subdirectorio usando mkdir -p src/sub.

② Con echo 'TODO: fix later' > src/a.txt y echo 'TODO: review' > src/sub/b.txt, crea archivos tanto en el directorio padre como en el subdirectorio.

③ Busca TODO bajo el directorio src con grep y la opción de búsqueda recursiva y confirma que aparecen las líneas de ambos archivos.

Linux console
0 / 4 completado(s)
Loading Linux Terminal...
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Qué se muestra al ejecutar grep error log.txt?

Pregunta 2¿Qué opción añades a grep para buscar sin distinguir mayúsculas y minúsculas?

Pregunta 3¿Cómo se comporta grep cuando añades -r y pasas un directorio?