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 allaread
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 ilwhile
loop, il comando echo stampa la$line
contenuto della variabile. Il-e
argomento consenteecho
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 ilcat
comando.
- Il
for
loop scorre ogni riga delcat
output del comando e lo stampa usando ilecho
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, ilIFS=
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 ilcat
output del comando suread
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 ilread
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 delwhile
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 alread
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.