¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Leer y buscar en archivos de texto

Después de esta lección: Puedo leer y buscar en archivos de texto desde la terminal.

Lección de 45 minSin comandos

Mil líneas y una queja

Trabajas en el soporte de una tienda online. Una clienta escribe: su pago del pedido 1043 ha fallado.

El servidor guarda todo lo que pasa en un archivo de texto con miles de líneas. Nadie puede leerlo entero.

Con dos o tres comandos encuentras la línea que buscas en segundos.

Al final de esta lección

Nota

Puedo leer y buscar en archivos de texto desde la terminal.

Palabras clave

PalabraQué significaEjemplo
Registroarchivo donde un programa apunta lo que hace; en inglés, log
Líneaun renglón de un archivo de texto
Patróntexto que buscas dentro de las líneasERROR
Salidalo que un comando muestra al terminar
Tuberíael símbolo | que pasa la salida de un comando al siguiente

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

cat, head y tail muestran un archivo

cat muestra un archivo entero. Sirve para archivos cortos.

head muestra solo el principio, y tail solo el final. Con -n 3 eliges cuántas líneas quieres.

En un registro, las líneas nuevas se añaden al final. Por eso tail te enseña lo último que ha pasado.

Lee el registro de la tienda

Código: bash
printf '%s\n' \
  '09:02 INFO pedido 1041 pagado' \
  '09:05 INFO pedido 1042 pagado' \
  '09:11 ERROR pago rechazado en el pedido 1043' \
  '09:15 INFO pedido 1044 enviado a Sevilla' \
  '09:20 ERROR sin stock para el pedido 1045' \
  '09:31 INFO pedido 1046 pagado' \
  '09:40 AVISO el almacen de Getafe tarda en responder' \
  '09:52 error pago rechazado en el pedido 1047' > tienda.log

# Todo el archivo de una vez.
cat tienda.log

# Solo las tres primeras líneas.
head -n 3 tienda.log

# Solo las dos últimas: lo más reciente.
tail -n 2 tienda.log

grep encuentra las líneas que buscas

grep ERROR tienda.log muestra solo las líneas que contienen ERROR. El resto no aparece.

El archivo no cambia. grep solo lee y te enseña lo que coincide.

Con -i, grep no distingue mayúsculas de minúsculas.

Busca en el registro

Código: bash
printf '%s\n' \
  '09:02 INFO pedido 1041 pagado' \
  '09:05 INFO pedido 1042 pagado' \
  '09:11 ERROR pago rechazado en el pedido 1043' \
  '09:15 INFO pedido 1044 enviado a Sevilla' \
  '09:20 ERROR sin stock para el pedido 1045' \
  '09:31 INFO pedido 1046 pagado' \
  '09:40 AVISO el almacen de Getafe tarda en responder' \
  '09:52 error pago rechazado en el pedido 1047' > tienda.log

# Las líneas que contienen ERROR, escrito así.
grep ERROR tienda.log

# Con -i no importan las mayúsculas.
grep -i error tienda.log

# Te toca: busca las líneas del pedido 1044.

Un error frecuente

Advertencia

Mucha gente cree que grep error también encuentra ERROR. grep distingue mayúsculas y minúsculas. Si no sabes cómo está escrita la palabra, añade -i. Así no se te escapa ninguna línea.

Una tubería une dos comandos

wc -l cuenta las líneas de lo que recibe.

El símbolo | es una tubería. Pasa la salida del comando de la izquierda al de la derecha.

Así, grep rechazado tienda.log | wc -l no muestra las líneas: muestra cuántas hay.

Ejemplo resuelto: el registro de la tienda

EscribesQué pasaResultado
wc -l tienda.logCuenta todas las líneas8 tienda.log
grep ERROR tienda.logMuestra las líneas con ERROR2 líneas
grep ERROR tienda.log | wc -lCuenta esas líneas2
grep -i error tienda.log | wc -lCuenta sin mirar mayúsculas3

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cuenta con una tubería

Código: bash
printf '%s\n' \
  '09:02 INFO pedido 1041 pagado' \
  '09:05 INFO pedido 1042 pagado' \
  '09:11 ERROR pago rechazado en el pedido 1043' \
  '09:15 INFO pedido 1044 enviado a Sevilla' \
  '09:20 ERROR sin stock para el pedido 1045' \
  '09:31 INFO pedido 1046 pagado' \
  '09:40 AVISO el almacen de Getafe tarda en responder' \
  '09:52 error pago rechazado en el pedido 1047' > tienda.log

# ¿Cuántas líneas tiene el registro?
wc -l tienda.log

# ¿Cuántas líneas hablan de un pago rechazado?
grep rechazado tienda.log | wc -l

# Te toca: cuenta las líneas con la palabra pagado.

Lo que espera quien te contrata

Consejo

En soporte, en sistemas y en desarrollo vas a leer registros a diario. Saber encontrar un error con grep y tail es de lo primero que te pedirán.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.