Cómo leer archivos en Linux con bash
Clase 32 de 43 • Curso de Programación en Bash Shell
Contenido del curso
Programación Shell Básica
Script Interactivos
Condicionales
Iteración
Archivos
Empaquetamiento
Funciones
Cierre del curso
Aprende a leer archivos en Ubuntu de forma clara y eficiente. Aquí se muestran tres enfoques fundamentales en scripts .sh: usar un comando directo, almacenar el contenido en una variable con sustitución de comandos y procesar línea por línea con while e IFS. Además, se corrige un error común con el signo de dólares y se explica cómo preservar espacios en blanco al leer.
¿Cómo leer archivos en Ubuntu con scripts .sh?
La secuencia avanza de la veintidós a la veintitrés, creando un nuevo script “veintitrés: leer_archivos.sh”. El objetivo es leer el contenido de un archivo y mostrarlo de tres formas. Se usa un archivo de prueba llamado “prueba.txt” y el argumento número uno ($1) para indicar la ruta.
- Tres métodos: comando, variable y while con IFS.
- Entrada estándar y redirección: para leer se usa la redirección inversa respecto a escribir.
- Archivo de ejemplo: prueba.txt.
Ejemplo de estructura general:
#!/usr/bin/env bash
# 1) Leer con un comando (según lo visto previamente).
cut "$1"
# 2) Almacenar en una variable con sustitución de comandos.
valor_cut=$(cut "$1")
echo "$valor_cut"
# 3) Leer línea por línea con while e IFS.
while IFS= read linea; do
echo "$linea"
done < "$1"
¿Cómo usar un comando y una variable para leer el archivo?
La primera alternativa usa un comando ya conocido para imprimir el contenido. La segunda guarda ese resultado en una variable usando sustitución de comandos. Se remarca la importancia del signo de dólares ($): un error tipográfico con “S” impidió que la variable se expandiera, y al corregirlo todo funcionó.
- Comando directo para mostrar todo el contenido de una vez.
- Sustitución de comandos con $() para capturar salida.
- Cuidado con el signo “$”: evita errores al expandir variables.
Ejemplo con variable:
# Guardar el contenido en una variable.
valor_cut=$(cut "$1")
# Imprimir el contenido leído.
echo "$valor_cut"
Puntos clave: - “eco -c” se usa en las impresiones para el título del bloque, manteniendo caracteres especiales en los comandos mostrados. - Resultado: dos formas rápidas para leer todo el archivo sin procesarlo línea por línea.
¿Cómo leer línea por línea con while e IFS sin perder espacios?
Para procesar archivos de forma línea por línea, se emplea un bucle while con una variable especial IFS. IFS significa internal file separator y aquí se usa para evitar que se recorten los espacios en blanco al inicio o al final de cada línea. Esto es clave cuando el archivo contiene rellenos o valores sensibles a espacios.
- IFS: define el separador de campos al leer.
- Con IFS presente: se respetan los espacios en blanco.
- Sin IFS: los espacios pueden recortarse en los extremos.
- Redirección “< $1”: indica que el while leerá del archivo pasado como primer argumento.
Ejemplo línea por línea con preservación de espacios:
while IFS= read linea; do
echo "$linea"
done < "$1"
Prueba práctica sugerida: - Edita “prueba.txt” y añade espacios al inicio y/o al final de algunas líneas. - Ejecuta con y sin IFS. - Observa la diferencia: con IFS los espacios se mantienen; sin IFS se recortan.
¿Quieres profundizar o te surgieron dudas al implementar estos métodos en tus scripts? Comparte tu caso en los comentarios y cuéntanos qué archivo y formato estás procesando.