Curso de Shell Scripting

El procesamiento de texto es uno de los puntos fuertes de los scripts en shell. Permite automatizar tareas como buscar patrones, extraer columnas o transformar datos masivos de manera rápida y eficiente.


8.1. Herramientas principales

HerramientaUso principal
grepBuscar líneas que coincidan con un patrón
sedEditar texto en flujo (buscar, reemplazar)
awkProcesar datos por campos y hacer cálculos
cutExtraer columnas o campos
sortOrdenar líneas
uniqQuitar duplicados o contarlos
trSustituir o eliminar caracteres
wcContar líneas, palabras o bytes
head/tailVer el inicio o final de archivos
joinUnir dos archivos por una columna común
commComparar líneas comunes o diferentes

8.2. grep: buscar texto por patrones

Búsqueda básica:

1grep "ERROR" logs.txt

Con resaltado de colores y número de línea:

1grep -n --color=auto "ERROR" logs.txt

Búsqueda recursiva en carpetas:

1grep -r "FATAL" /var/log

Ignorar mayúsculas:

1grep -i "error" logs.txt

Contar coincidencias:

1grep -c "ERROR" logs.txt

8.3. sed: buscar y reemplazar

Reemplazar la primera aparición de un patrón por línea:

1sed 's/ERROR/ALERTA/' logs.txt

Reemplazar todas las apariciones:

1sed 's/ERROR/ALERTA/g' logs.txt

Editar el archivo en el sitio (¡con cuidado!):

1sed -i 's/ERROR/ALERTA/g' logs.txt

Eliminar líneas que contengan un patrón:

1sed '/DEBUG/d' logs.txt

8.4. awk: procesar texto por columnas

awk divide cada línea en campos usando separadores (por defecto espacio/tabulador).

Ejemplo: mostrar la primera columna de un archivo CSV (separado por comas):

1awk -F',' '{print $1}' datos.csv

Mostrar segunda y tercera columna con un guion:

1awk -F',' '{print $2 "-" $3}' datos.csv

Sumar valores de la segunda columna:

1awk -F',' '{suma += $2} END {print "Total:", suma}' datos.csv

Filtrar filas con condición:

1awk -F',' '$3 > 50 {print $1, $3}' datos.csv

8.5. cut: extraer campos

Extraer primeras 10 letras de cada línea:

1cut -c1-10 archivo.txt

Extraer segunda columna de CSV (separador ,):

1cut -d',' -f2 archivo.csv

8.6. sort y uniq

Ordenar un archivo de texto:

1sort nombres.txt

Orden descendente:

1sort -r nombres.txt

Eliminar duplicados (requiere ordenar primero):

1sort nombres.txt | uniq

Contar cuántas veces aparece cada línea:

1sort nombres.txt | uniq -c

8.7. tr: transformar caracteres

Convertir minúsculas a mayúsculas:

1tr 'a-z' 'A-Z' < archivo.txt

Eliminar dígitos:

1tr -d '0-9' < archivo.txt

8.8. wc: contar líneas, palabras y bytes

Contar líneas:

1wc -l archivo.txt

Contar palabras:

1wc -w archivo.txt

Contar caracteres:

1wc -c archivo.txt

8.9. head y tail: mostrar partes de un archivo

Primeras 5 líneas:

1head -n 5 archivo.txt

Últimas 10 líneas:

1tail -n 10 archivo.txt

Monitorizar un archivo en tiempo real (por ejemplo logs):

1tail -f /var/log/syslog

8.10. Ejemplo integrador: pipeline

Supongamos un archivo access.log con entradas tipo:

192.168.0.1 GET /index.html 200
192.168.0.2 GET /contact.html 404
192.168.0.1 GET /about.html 200

Contar cuántas peticiones hizo cada IP:

1awk '{print $1}' access.log | sort | uniq -c | sort -nr

Salida:

2 192.168.0.1
1 192.168.0.2

🏋️‍♂️ Ejercicio práctico 1

Crea un script llamado analiza_logs.sh que:

  1. Busque en todos los .log del directorio actual las líneas con “ERROR” usando grep.
  2. Reemplace la palabra “ERROR” por “ALERTA” en la salida (sin modificar los archivos originales) usando sed.
  3. Cuente cuántas líneas se encontraron usando wc -l.
  4. Muestre un resumen con el total de alertas.

🏋️‍♂️ Ejercicio práctico 2

Tienes un archivo ventas.csv con el formato:

Producto,Cantidad,Precio
Libro,3,15
Lapiz,10,1
Cuaderno,5,2

Crea un script calcula_ingresos.sh que:

  1. Ignore la primera línea (encabezado) con tail -n +2.
  2. Calcule Cantidad * Precio de cada fila usando awk.
  3. Muestre el ingreso total.

Salida esperada:

Ingreso total: 65

✅ Buenas prácticas

  1. ✅ Usa grep -E o awk para patrones complejos.
  2. ✅ Con datos grandes, encadena comandos con | para evitar archivos temporales.
  3. ✅ Comprueba el separador correcto en CSV con -F en awk o -d en cut.
  4. ✅ Prueba los comandos por separado antes de integrarlos en un script.
  • Loading...