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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Registro | archivo donde un programa apunta lo que hace; en inglés, log | |
| Línea | un renglón de un archivo de texto | |
| Patrón | texto que buscas dentro de las líneas | ERROR |
| Salida | lo que un comando muestra al terminar | |
| Tubería | el 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
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
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
| Escribes | Qué pasa | Resultado |
|---|---|---|
| wc -l tienda.log | Cuenta todas las líneas | 8 tienda.log |
| grep ERROR tienda.log | Muestra las líneas con ERROR | 2 líneas |
| grep ERROR tienda.log | wc -l | Cuenta esas líneas | 2 |
| grep -i error tienda.log | wc -l | Cuenta sin mirar mayúsculas | 3 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Cuenta con una tubería
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.