GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo leer archivos línea por línea en Bash

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 + Alternativo + T ) y cree un nuevo script Bash usando un editor de texto como vi/vim:

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 a read 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 del while loop, el comando echo imprime el $line contenido de la variable. El -e el argumento permite echo 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 el cat comando.
  • El for el bucle itera a través de cada línea del cat salida del comando y lo imprime usando el echo 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, el IFS= 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 al cat salida del comando a read 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 al read 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 en while 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 a read 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.


Linux
  1. Cómo eliminar archivos y directorios en Linux desde la línea de comandos

  2. Cómo agregar números de línea a archivos de texto en Linux

  3. Cómo dividir y combinar archivos desde la línea de comandos en Linux

  4. Buzón ocupado ¿Leer archivo línea por línea?

  5. En Bash, ¿cómo agrego una cadena después de cada línea en un archivo?

Cómo truncar archivos (vacíos) en Linux

Cómo redirigir stderr a stdout en Bash

Cómo cambiar el nombre de un archivo (s) en Linux

Bash scripting:cómo leer datos de archivos de texto

Cómo encontrar archivos con docenas de criterios con el comando Bash Find

Cómo comprimir un archivo en Linux