GNU/Linux >> Linux Esercitazione >  >> Linux

Come leggere i file riga per riga in Bash

Introduzione

La lettura di un file riga per riga consente di elaborare in modo efficace il contenuto di un file e di visualizzare ogni riga come elemento di un elenco. Dopo aver visualizzato ciascuna riga separatamente, cerca o abbina facilmente qualsiasi contenuto specifico.

Uno dei modi per leggere un file di testo in singole righe è usare la shell Bash.

In questo tutorial imparerai a leggere un file riga per riga in Bash.

Prerequisiti

  • Un sistema che esegue Linux.
  • Accesso a un terminale (Ctrl + Alt + T ).
  • Un editor di testo (come Nano o vi/vim).

Lettura riga per riga in Bash

Esistono diversi metodi per leggere un file riga per riga usando Bash. Le sezioni seguenti evidenziano cinque metodi per elaborare un file una riga alla volta utilizzando Bash.

Metodo 1:utilizzo del comando Read e While Loop

Il primo metodo consiste nell'usare il comando read e un while ciclo in uno script Bash. Sebbene sia possibile fare lo stesso in un terminale, gli script Bash salvano il codice e lo rendono riutilizzabile. Segui i passaggi seguenti:

1. Apri il terminale (Ctrl + Alt + T ) e crea un nuovo script Bash usando un editor di testo come vi/vim:

vi line.sh

2. Immettere le seguenti righe:

#!/bin/bash
file="days.txt"
while read -r line; do
echo -e "$line\n"
done <$file
  • Il $file La variabile è definita dopo la riga shebang (la prima riga negli script Bash) e memorizza il percorso del file di input che si desidera elaborare.
  • Il -r argomento aggiunto alla read il comando impedisce l'interpretazione di eventuali caratteri con escape barra rovesciata durante la lettura del contenuto del file.
  • Il contenuto di ogni riga è memorizzato nella $line variabile. Entro il while loop, il comando echo stampa la $line contenuto della variabile. Il -e argomento consente echo per interpretare caratteri speciali come il carattere di nuova riga \n .
  • Il while il ciclo continua finché non raggiunge la fine del file e il ciclo termina.

3. Salva lo script ed esci da vi:

:wq

4. Esegui lo script:

bash line.sh

Lo script restituisce ciascuna riga del file di testo di esempio separatamente.

Metodo 2:utilizzo di cat Command e for Loop

Un altro metodo per visualizzare il contenuto di un file in singole righe consiste nell'usare il comando cat e il for ciclo continuo. Il for loop consente echo per stampare le righe dal cat output del comando fino a raggiungere la fine del file.

Segui i passaggi seguenti:

1. Crea un nuovo script:

vi readfile.sh

2. Immettere le seguenti righe:

#!/bin/bash
file=$(cat days.txt)
for line in $file
do
echo -e "$line\n"
done
  • Il $file La variabile memorizza il contenuto del file di input utilizzando il cat comando.
  • Il for loop scorre ogni riga del cat output del comando e lo stampa usando il echo comando fino a raggiungere la fine del file.

3. Salva lo script ed esci da vi:

:wq

4. Esegui lo script:

bash readfile.sh

Lo script restituisce il contenuto del file riga per riga nell'output standard.

Metodo 3:usare qui le stringhe

Un altro metodo per stampare il contenuto di un file riga per riga consiste nell'usare un here stringa per inviare il contenuto del file al read comando. Il here string collega il contenuto di una variabile, una stringa o un file specificato dopo il <<< sintassi allo standard input del programma invocato.

Segui i passaggi seguenti:

1. Crea un nuovo script Bash:

vi herestrings.sh

2. Immettere le seguenti righe:

#!/bin/bash
while IFS= read -r line; do
printf '%s\n' "$line"
done <<< $(cat days.txt )
  • Nel while ciclo, il IFS= argomento è una stringa vuota per evitare di tagliare gli spazi bianchi.
  • Il -r argomento impedisce l'interpretazione dei caratteri con escape barra rovesciata.
  • Il printf comando stampa ogni riga del file. Gli specificatori di formato considerano l'input come una stringa (%s ) e aggiungi un carattere di nuova riga (\n ) dopo ogni riga.
  • Il here string alimenta il cat output del comando su read comando.

3. Salva lo script ed esci dall'editor:

:wq

4. Esegui lo script:

bash herestrings.sh

L'output stampa riga per riga il contenuto del file.

Metodo 4:utilizzo dei descrittori di file

Un descrittore di file si riferisce a un file o processo aperto. Ogni processo ha tre descrittori di file predefiniti:

  • 0 . Ingresso standard.
  • 1 . Uscita standard.
  • 2 . Errore standard.

Fornisci l'input per il read comando utilizzando un descrittore di file e genera separatamente ogni riga dal contenuto del file. Segui i passaggi seguenti:

1. Crea un nuovo script bash:

vi descriptors.sh

2. Immettere le seguenti righe:

#!/bin/bash
while IFS= read -r -u9 line; do
printf '%s\n' "$line"
done 9< days.txt
  • Nel while loop, istruisci il read comando per leggere l'input da un descrittore di file specificando il -u argomento e il numero del descrittore di file.

Importante: Quando specifichi i descrittori di file, usa un numero compreso tra 4 e 9 per evitare conflitti con i descrittori di file della shell interni.

  • Il printf il comando tratta l'input $line variabile come stringa (%s ) e aggiunge un carattere di nuova riga (\n ) dopo aver stampato il $line contenuti.
  • Il 9< la sintassi contiene lo stesso numero del descrittore di file del while ciclo continuo. Il contenuto del file di input viene inviato al descrittore di file specificato.

3. Salva lo script:

:wq

4. Esegui lo script per testare il codice:

bash descriptors.sh

L'output dello script stampa ogni riga del file separatamente.

Metodo 5:utilizzo della sostituzione del processo

La sostituzione del processo consente all'output standard di uno o più processi di apparire come un file e lo inserisce nell'input standard di un altro processo. Utilizzare la sostituzione del processo per fornire il file di input e stampare ciascuna riga di file separatamente.

Segui i passaggi seguenti:

1. Crea uno script Bash:

vi substitution.sh

2. Immettere le seguenti righe:

#!/bin/bash
while IFS= read -r line; do
printf '%s\n' "$line"
done < <(cat days.txt)
  • Dopo aver chiuso il ciclo, cat il file di input racchiuso tra parentesi <(cat [input_file_path] per inviare il risultato del processo al read comando.

Importante: Fai attenzione a non aggiungere spazi bianchi tra il < carattere e la parentesi a sinistra ( . L'utilizzo di uno spazio vuoto interpreta il codice come un reindirizzamento e genera un errore.

3. Salva lo script:

:wq

4. Esegui lo script:

bash substitution.sh

Ciascuna riga del file viene stampata separatamente nell'output standard.


Linux
  1. Come eliminare file e directory in Linux dalla riga di comando

  2. Come aggiungere numeri di riga a file di testo su Linux

  3. Come dividere e combinare file dalla riga di comando in Linux

  4. Come leggere la penultima riga in un file usando Bash?

  5. Come leggere l'ultima riga di un file di testo in una variabile usando Bash?

Come troncare (svuotare) i file in Linux

Come reindirizzare stderr a stdout in Bash

Come rinominare uno o più file in Linux

Scripting Bash:come leggere i dati dai file di testo

Come trovare file con dozzine di criteri con il comando Trova Bash

Come comprimere un file in Linux