Al escribir un bash script, depende del flujo de automatización, a veces el script tiene que leer el contenido del archivo línea por línea. Aquí aprendemos 3 métodos en un bash script para leer el archivo línea por línea.
Método 1: usar el redirector de entrada
La forma más sencilla de leer un archivo línea por línea es utilizando el redirector de entrada en un bucle while.
Para demostrar, hemos creado un archivo de muestra llamado ‘mycontent.txt’ y lo usaremos a lo largo de este tutorial.
$ cat mycontent.txt
This is a sample file
We are going through contents
line by line
to understand
Creemos un script llamado ‘example1.sh’ que usa aporte redireccionar y círculo.
$ more example1.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < mycontent.txt
Cómo funciona:
– Declarando shell que es “bash”
– Comenzar el ciclo while y guardar el contenido de la línea en la variable “y”
– hacer parte del bucle while (punto de partida)
– echo para imprimir y “$ y” significa imprimir el valor de la variable, es decir, la línea
– Leer el contenido del archivo usando el redirector de entrada “<" y cerrar con hecho
Ejecución de Script y Salida:
$ ./example1.sh
Line contents are : This is a sample file
Line contents are : We are going through contents
Line contents are : line by line
Line contents are : to understand
Método 2: usar el comando cat
El segundo método es usar el comando cat y luego enviar su producción como aporte mientras tanto círculo utilizando el tubo.
Cree un archivo de secuencia de comandos ‘ejemplo2.sh’, con contenido como:
$ more example2.sh
#!/bin/bash
cat mycontent.txt | while read y
do
echo "Line contents are : $y "
done
Cómo funciona:
– Declarando shell que es “bash”
– Salida del comando cat enviado como entrada al bucle while usando tubería
“|” y guardar el contenido de la línea en la variable “y”
– hacer parte del bucle while (punto de partida)
– echo para imprimir y “$ y” significa imprimir el valor de la variable, es decir, la línea
– Cierre del bucle while hecho
Ejecución de Script y Salida:
$ ./example2.sh
Line contents are : This is a sample file
Line contents are : We are going through contents
Line contents are : line by line
Line contents are : to understand
Sugerencia: podemos combinar todos los comandos y usarlos como delineadores.
Producción:
$ while read line; do echo $line; done < mycontent.txt
This is a sample file
We are going through contents
line by line
to understand
3. Usando el nombre de archivo pasado como argumento
Este tercer método enviará el nombre del archivo como argumento de entrada a través de la línea de comando.
Cree un archivo de secuencia de comandos llamado ‘ejemplo3.sh’, como:
$ more example3.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < $1
Cómo funciona:
– Declarando shell que es “bash”
– Comenzar el ciclo while y guardar el contenido de la línea en la variable “y”
– hacer parte del bucle while (punto de partida)
– echo para imprimir y “$ y” significa imprimir el valor de la variable, es decir, la línea
– Leyendo el contenido del archivo desde el argumento de la línea de comando, es decir, $ 1 usando el redirector de entrada “<" y cerrando con hecho
Ejecución de Script y Salida:
$ ./example3.sh mycontent.txt
Line contents are : This is a sample file
Line contents are : We are going through contents Output of Script
Line contents are : line by line
Line contents are : to understand
Manejo de barra invertida y carácter de escape
Cuando el contenido del archivo tiene barra invertida y caracteres de escape, el comando de lectura solía ignorar esos caracteres de barra invertida y escape.
Si queremos leer todo del archivo, use -r
opción para evitar que los escapes de barra invertida se interpreten y muestren el valor en la consola.
Si el contenido del archivo tiene un separador de archivo como una coma o una barra vertical, podemos usar IFS (Separador de campo interno) para dividir el archivo según el delimitador y mostrar los valores.
Ejemplo de secuencia de comandos de shell:
#!/bin/bash
inputfile="foobar.txt"
while IFS=, read -r y
do
echo $y
done < $inputfile
Flujo de secuencia de comandos:
– Asignar la ruta del archivo a la variable ‘inputfile’
– Mientras que el bucle lee el archivo línea por línea
– -r evita que se interpreten los escapes de barra invertida
– IFS (Separador de campo interno), si queremos dividir la línea con el separador de campo necesitamos especificar el valor del separador (Ej: si la línea tiene un valor como ‘foo, bar’ y queremos dividir la coma, entonces el valor IFS debe ser ( IFS =,))
– echo ayudará a imprimir el contenido en la consola
– una vez alcanzado el final del archivo mientras sale el bucle
Conclusión
Este tutorial explica cómo leer el contenido del archivo línea por línea usando bash script de shell con ejemplos. Ayuda a buscar cadenas en un archivo leyendo líneas individualmente.
Gracias por leer, deje sus sugerencias y reseñas en la sección de comentarios.