Operaciones Avanzadas con Cadenas en Bash
En este paso final, exploraremos operaciones con cadenas más avanzadas en Bash, incluyendo manipulación de cadenas, coincidencia de patrones y sustitución. Estas técnicas te permitirán realizar tareas complejas de procesamiento de texto en tus scripts.
Funciones de Manipulación de Cadenas
Bash proporciona varios mecanismos integrados para manipular cadenas. Exploremos estas operaciones:
-
Abre el archivo string_ops.sh en el editor:
- Navega a
~/project/string_formatting en el explorador de archivos
- Haz clic en
string_ops.sh para abrirlo
-
Reemplaza el contenido con el siguiente código:
#!/bin/bash
## Longitud de la cadena
message="¡Hola, mundo de scripting de Bash!"
echo "Mensaje original: $message"
echo "Longitud del mensaje: ${#message} caracteres"
## Extracción de subcadenas
## Sintaxis: ${string:posición:longitud}
echo "Primeros 5 caracteres: ${message:0:5}"
echo "Caracteres 7-11: ${message:7:5}"
echo "Desde la posición 13 hasta el final: ${message:13}"
## Búsqueda y reemplazo dentro de cadenas
filename="reporte.txt.backup"
echo "Nombre de archivo original: $filename"
## Reemplazar la primera ocurrencia
echo "Reemplazar la primera ocurrencia de 'txt' con 'pdf': ${filename/txt/pdf}"
## Reemplazar todas las ocurrencias
text="uno dos uno dos tres"
echo "Texto original: $text"
echo "Reemplazar todas las ocurrencias de 'uno' con '1': ${text//uno/1}"
## Reemplazar al principio de la cadena
echo "Reemplazar 'uno' al principio: ${text/#uno/1}"
## Reemplazar al final de la cadena
echo "Reemplazar 'tres' al final: ${text/%tres/3}"
-
Guarda el archivo presionando Ctrl+S o seleccionando "Archivo" > "Guardar" del menú
-
Ahora hagamos que el archivo sea ejecutable y ejecutémoslo:
chmod +x string_ops.sh
./string_ops.sh
Deberías ver la salida mostrando varias operaciones de manipulación de cadenas:
Mensaje original: ¡Hola, mundo de scripting de Bash!
Longitud del mensaje: 29 caracteres
Primeros 5 caracteres: ¡Hola
Caracteres 7-11: mundo
Desde la posición 13 hasta el final: scripting de Bash!
Nombre de archivo original: reporte.txt.backup
Reemplazar la primera ocurrencia de 'txt' con 'pdf': reporte.pdf.backup
Texto original: uno dos uno dos tres
Reemplazar todas las ocurrencias de 'uno' con '1': 1 dos 1 dos tres
Reemplazar 'uno' al principio: 1 dos uno dos tres
Reemplazar 'tres' al final: uno dos uno dos 3
Conversión de Mayúsculas y Minúsculas
Bash también proporciona mecanismos para cambiar el caso del texto. Agreguemos ejemplos de conversión de mayúsculas y minúsculas:
- Agrega el siguiente código al final de
string_ops.sh:
## Conversión de mayúsculas y minúsculas
mayusculas="HOLA MUNDO"
minusculas="hola mundo"
mixto="Hola Mundo"
## Convertir a mayúsculas
echo "Original: $minusculas"
echo "Mayúsculas: ${minusculas^^}"
## Convertir a minúsculas
echo "Original: $mayusculas"
echo "Minúsculas: ${mayusculas,,}"
## Convertir el primer carácter a mayúscula
echo "Original: $minusculas"
echo "Primer carácter en mayúscula: ${minusculas^}"
## Convertir el primer carácter a minúscula
echo "Original: $mixto"
echo "Primer carácter en minúscula: ${mixto,}"
- Guarda el archivo y ejecútalo de nuevo:
./string_ops.sh
La salida adicional debería mostrar ejemplos de conversión de mayúsculas y minúsculas:
Original: hola mundo
Mayúsculas: HOLA MUNDO
Original: HOLA MUNDO
Minúsculas: hola mundo
Original: hola mundo
Primer carácter en mayúscula: Hola mundo
Original: Hola Mundo
Primer carácter en minúscula: hola Mundo
Agreguemos ejemplos de técnicas de recorte y formateo de cadenas:
- Agrega el siguiente código al final de
string_ops.sh:
## Recorte de cadenas
path=" /usr/local/bin/ "
echo "Ruta original con espacios: '$path'"
echo "Ruta recortada: '${path// /}'" ## Eliminar todos los espacios
## Eliminación de prefijos y sufijos
filename="archivo.tar.gz"
echo "Nombre de archivo original: $filename"
echo "Sin la extensión .tar.gz: ${filename%.tar.gz}"
echo "Sin ninguna extensión: ${filename%%.*}"
echo "Extraer la extensión: ${filename#*.}"
echo "Extraer la extensión completa: ${filename##*.}"
## Rellenar cadenas
number=42
printf "Número con ceros iniciales (5 dígitos): %05d\n" $number
name="Bob"
printf "Nombre rellenado a 10 caracteres: %-10s|\n" $name
- Guarda el archivo y ejecútalo de nuevo:
./string_ops.sh
La salida adicional debería mostrar ejemplos de recorte y formateo:
Ruta original con espacios: ' /usr/local/bin/ '
Ruta recortada: '/usr/local/bin/'
Nombre de archivo original: archivo.tar.gz
Sin la extensión .tar.gz: archivo
Sin ninguna extensión: archivo
Extraer la extensión: tar.gz
Extraer la extensión completa: gz
Número con ceros iniciales (5 dígitos): 00042
Nombre rellenado a 10 caracteres: Bob |
Ejemplo Práctico: Analizador de Registros (Log Parser)
Creemos un ejemplo práctico que utiliza operaciones avanzadas con cadenas para analizar y formatear entradas de registro:
- Agrega el siguiente código al final de
string_ops.sh:
## Ejemplo práctico: Analizador de registros
echo -e "\n--- Ejemplo de Analizador de Registros ---\n"
## Entradas de registro de muestra
log_entries=(
"[2023-10-25 08:15:22] INFO: Aplicación iniciada"
"[2023-10-25 08:16:45] WARNING: Uso de memoria alto detectado"
"[2023-10-25 08:17:30] ERROR: Falló la conexión a la base de datos"
"[2023-10-25 08:18:10] INFO: Proceso de respaldo iniciado"
"[2023-10-25 08:19:55] ERROR: Falta espacio en disco"
)
## Analizar y formatear entradas de registro
for entry in "${log_entries[@]}"; do
## Extraer la marca de tiempo (todo entre [ y ])
timestamp=${entry#*\[}
timestamp=${timestamp%%]*}
## Extraer el nivel de registro (INFO, WARNING, ERROR)
level=${entry#*] }
level=${level%%:*}
## Extraer el mensaje
message=${entry#*: }
## Formatear basado en el nivel de registro
case $level in
"INFO")
printf "%-20s [\033[36m%-7s\033[0m] %s\n" "$timestamp" "$level" "$message"
;;
"WARNING")
printf "%-20s [\033[33m%-7s\033[0m] %s\n" "$timestamp" "$level" "$message"
;;
"ERROR")
printf "%-20s [\033[31m%-7s\033[0m] %s\n" "$timestamp" "$level" "$message"
;;
esac
done
- Guarda el archivo y ejecútalo:
./string_ops.sh
La sección de salida final debería mostrar entradas de registro formateadas con diferentes colores según el nivel de registro:
--- Ejemplo de Analizador de Registros ---
2023-10-25 08:15:22 [INFO ] Aplicación iniciada
2023-10-25 08:16:45 [WARNING] Uso de memoria alto detectado
2023-10-25 08:17:30 [ERROR ] Falló la conexión a la base de datos
2023-10-25 08:18:10 [INFO ] Proceso de respaldo iniciado
2023-10-25 08:19:55 [ERROR ] Falta espacio en disco
Este ejemplo de analizador de registros demuestra cómo la combinación de varias operaciones con cadenas con formateo y códigos de color puede transformar datos de texto sin formato en un formato más legible y estructurado. Tales técnicas son extremadamente útiles al desarrollar scripts para análisis de registros, procesamiento de datos o informes.