Introducción
Leer un archivo línea por línea le permite procesar efectivamente el contenido de un archivo y mostrar cada línea como un elemento en una lista. Después de mostrar cada línea por separado, busque o haga coincidir cualquier contenido específico fácilmente.
Una de las formas de leer un archivo de texto en líneas individuales es usar el shell Bash.
En este tutorial, aprenderá a leer un archivo línea por línea en Bash.
Requisitos previos
- Un sistema que ejecuta Linux.
- Acceso a una terminal (Ctrl +
Alternativo + T ). - Un editor de texto (como Nano o vi/vim).
Lectura línea por línea en Bash
Hay varios métodos para leer un archivo línea por línea usando Bash. Las siguientes secciones destacan cinco métodos para procesar un archivo línea por línea usando Bash.
Método 1:usar el comando de lectura y el ciclo while
El primer método es usar el comando de lectura y un while bucle en un script Bash. Si bien es posible hacer lo mismo en una terminal, los scripts de Bash guardan el código y lo vuelven reutilizable. Siga los pasos a continuación:
1. Abra la terminal (Ctrl +
vi line.sh 2. Introduzca las siguientes líneas:
#!/bin/bash
file="days.txt"
while read -r line; do
echo -e "$line\n"
done <$file - El
$fileLa variable se define después de la línea shebang (la primera línea en los scripts de Bash) y almacena la ruta al archivo de entrada que desea procesar.
- El
-rargumento añadido areadEl comando evita la interpretación de cualquier carácter de escape con barra invertida mientras se lee el contenido del archivo.
- El contenido de cada línea se almacena en
$linevariable. Dentro delwhileloop, el comando echo imprime el$linecontenido de la variable. El-eel argumento permiteechopara interpretar caracteres especiales como el carácter de nueva línea\n.
- El
whileel bucle continúa hasta que llega al final del archivo y finaliza.
3. Guarde el script y salga de vi:
:wq 4. Ejecute el script:
bash line.sh
El script genera cada línea del archivo de texto de ejemplo por separado.
Método 2:usar el comando cat y bucle for
Otro método para mostrar el contenido de un archivo en líneas individuales es usar el comando cat y el for círculo. El for el bucle permite echo para imprimir las líneas del cat salida del comando hasta que llegue al final del archivo.
Siga los pasos a continuación:
1. Cree un nuevo guión:
vi readfile.sh 2. Introduzca las siguientes líneas:
#!/bin/bash
file=$(cat days.txt)
for line in $file
do
echo -e "$line\n"
done - El
$fileLa variable almacena el contenido del archivo de entrada usando elcatcomando.
- El
forel bucle itera a través de cada línea delcatsalida del comando y lo imprime usando elechocomando hasta que llegue al final del archivo.
3. Guarde el script y salga de vi:
:wq 4. Ejecute el script:
bash readfile.sh
El script genera el contenido del archivo línea por línea en la salida estándar.
Método 3:Usar cadenas aquí
Otro método para imprimir el contenido de un archivo línea por línea es usar un here cadena para alimentar el contenido del archivo a read dominio. El here string conecta el contenido de una variable, cadena o archivo especificado después de <<< sintaxis a la entrada estándar del programa invocado.
Siga los pasos a continuación:
1. Cree un nuevo script Bash:
vi herestrings.sh 2. Introduzca las siguientes líneas:
#!/bin/bash
while IFS= read -r line; do
printf '%s\n' "$line"
done <<< $(cat days.txt ) - En el
whilebucle, elIFS=argumento es una cadena vacía para evitar recortar espacios en blanco.
- El
-rEl argumento impide la interpretación de caracteres con barra invertida.
- El
printfEl comando imprime cada línea del archivo. Los especificadores de formato tratan la entrada como una cadena (%s) y agregue un carácter de nueva línea (\n) después de cada línea.
- El
herela cadena alimenta alcatsalida del comando areadcomando.
3. Guarde el script y salga del editor:
:wq 4. Ejecute el script:
bash herestrings.sh
La salida imprime el contenido del archivo línea por línea.
Método 4:uso de descriptores de archivo
Un descriptor de archivo se refiere a un archivo o proceso abierto. Cada proceso tiene tres descriptores de archivo predeterminados:
0. Entrada estándar.1. Salida estándar.2. Error estándar.
Proporcione la entrada para read comando utilizando un descriptor de archivo y generar cada línea del contenido del archivo por separado. Siga los pasos a continuación:
1. Cree un nuevo script bash:
vi descriptors.sh 2. Introduzca las siguientes líneas:
#!/bin/bash
while IFS= read -r -u9 line; do
printf '%s\n' "$line"
done 9< days.txt - En el
whilebucle, indique alreadcomando para leer la entrada de un descriptor de archivo especificando-uargumento y el número del descriptor del archivo.
Importante: Al especificar descriptores de archivos, utilice un número entre 4 y 9 para evitar conflictos con los descriptores de archivos de shell internos.
- El
printfel comando trata la entrada$linevariable como una cadena (%s) y agrega un carácter de nueva línea (\n) después de imprimir$linecontenidos.
- El
9<la sintaxis contiene el mismo número de descriptor de archivo que enwhilecírculo. El contenido del archivo de entrada se envía al descriptor de archivo especificado.
3. Guarde el guión:
:wq 4. Ejecute el script para probar el código:
bash descriptors.sh
La salida del script imprime cada línea del archivo por separado.
Método 5:Uso de sustitución de procesos
La sustitución de procesos permite que la salida estándar de un proceso (o procesos) aparezca como un archivo y lo alimenta a la entrada estándar de otro proceso. Utilice la sustitución de procesos para proporcionar el archivo de entrada e imprima cada línea de archivo por separado.
Siga los pasos a continuación:
1. Cree una secuencia de comandos Bash:
vi substitution.sh 2. Introduzca las siguientes líneas:
#!/bin/bash
while IFS= read -r line; do
printf '%s\n' "$line"
done < <(cat days.txt) - Después de cerrar el ciclo,
catel archivo de entrada entre paréntesis<(cat [input_file_path]para enviar el resultado del proceso areadcomando.
Importante: Preste atención para no agregar espacios en blanco entre < carácter y el paréntesis izquierdo ( . El uso de un carácter de espacio en blanco interpreta el código como una redirección y genera un error.
3. Guarde el guión:
:wq 4. Ejecute el script:
bash substitution.sh
Cada línea de archivo se imprime por separado en la salida estándar.