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
$file
La 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
-r
argumento añadido aread
El 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
$line
variable. Dentro delwhile
loop, el comando echo imprime el$line
contenido de la variable. El-e
el argumento permiteecho
para interpretar caracteres especiales como el carácter de nueva línea\n
.
- El
while
el 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
$file
La variable almacena el contenido del archivo de entrada usando elcat
comando.
- El
for
el bucle itera a través de cada línea delcat
salida del comando y lo imprime usando elecho
comando 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
while
bucle, elIFS=
argumento es una cadena vacía para evitar recortar espacios en blanco.
- El
-r
El argumento impide la interpretación de caracteres con barra invertida.
- El
printf
El 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
here
la cadena alimenta alcat
salida del comando aread
comando.
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
while
bucle, indique alread
comando para leer la entrada de un descriptor de archivo especificando-u
argumento 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
printf
el comando trata la entrada$line
variable como una cadena (%s
) y agrega un carácter de nueva línea (\n
) después de imprimir$line
contenidos.
- El
9<
la sintaxis contiene el mismo número de descriptor de archivo que enwhile
cí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,
cat
el archivo de entrada entre paréntesis<(cat [input_file_path]
para enviar el resultado del proceso aread
comando.
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.