Come leggere il file riga per riga nello script Bash [3 Methods]
Quando si scrive uno script bash, dipende dal flusso di automazione, a volte lo script deve leggere il contenuto dal file riga per riga. Qui impariamo 3 metodi in uno script bash per leggere il file riga per riga.
Metodo 1: utilizzo del reindirizzamento in entrata
Il modo più semplice per leggere un file riga per riga è utilizzare il redirector di input in un ciclo while.
Per dimostrarlo abbiamo creato un file di esempio chiamato “mycontent.txt” e lo useremo durante questo tutorial.
$ cat mycontent.txt
This is a sample file
We are going through contents
line by line
to understand
Creiamo uno script chiamato “example1.sh” che utilizza iscrizione reindirizzare e ciclo continuo.
$ more example1.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < mycontent.txt
Come funziona:
– Dichiara la shell che è “bash”
– Avviare il ciclo while e salvare il contenuto della riga nella variabile “y”
– fai parte del ciclo while (Punto di inizio)
– echo to print e “$y” significa print valore variabile cioè linea
– Leggere il contenuto del file utilizzando il redirector di input “<" e chiudere con done
Esecuzione dello script e dell’output:
$ ./example1.sh
Line contents are : This is a sample file
Line contents are : We are going through contents
Line contents are : line by line
Line contents are : to understand
Metodo 2: utilizzando il comando cat
Il secondo metodo consiste nell’utilizzare il comando cat e quindi inviarlo Uscita come iscrizione a tempo ciclo continuo uso tubo.
Crea un file di script “example2.sh”, con contenuti come:
$ more example2.sh
#!/bin/bash
cat mycontent.txt | while read y
do
echo "Line contents are : $y "
done
Come funziona:
– Dichiara la shell che è “bash”
– Output del comando cat inviato come input al ciclo while tramite pipe
“|” e salvando il contenuto della riga nella variabile “y”
– fai parte del ciclo while (Punto di inizio)
– echo to print e “$y” significa print valore variabile cioè linea
– La chiusura del ciclo while è completa
Esecuzione dello script e dell’output:
$ ./example2.sh
Line contents are : This is a sample file
Line contents are : We are going through contents
Line contents are : line by line
Line contents are : to understand
Suggerimento: possiamo combinare tutti i comandi e usarli come oneliner.
Produzione:
$ while read line; do echo $line; done < mycontent.txt
This is a sample file
We are going through contents
line by line
to understand
3. Utilizzo del nome del file passato come argomento
Questo terzo metodo invierà il nome del file come a argomento di input attraverso la riga di comando.
Crea un file di script chiamato “example3.sh” in questo modo:
$ more example3.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < $1
Come funziona:
– Dichiara la shell che è “bash”
– Avviare il ciclo while e salvare il contenuto della riga nella variabile “y”
– fai parte del ciclo while (Punto di inizio)
– echo to print e “$y” significa print valore variabile cioè linea
– Lettura del contenuto del file dall’argomento della riga di comando, ad esempio $1, utilizzando il redirector di input “<" e chiudendo con done
Esecuzione dello script e dell’output:
$ ./example3.sh mycontent.txt
Line contents are : This is a sample file
Line contents are : We are going through contents Output of Script
Line contents are : line by line
Line contents are : to understand
Barra rovesciata e gestione dei caratteri di escape
Quando il contenuto del file ha una barra rovesciata e caratteri di escape, il comando read viene utilizzato per ignorare quei caratteri di barra rovesciata e escape.
Se vogliamo leggere tutto dal file, allora usa -r
opzione per impedire l’interpretazione della barra rovesciata e il valore visualizzato nella console.
Se il contenuto del file ha un separatore di file come virgola o pipe, possiamo utilizzare IFS (Internal Field Separator) per dividere il file in base al delimitatore e visualizzare i valori.
Esempio di script di shell:
#!/bin/bash
inputfile="foobar.txt"
while IFS=, read -r y
do
echo $y
done < $inputfile
Flusso dello script:
– Assegnare il percorso del file alla variabile “inputfile”.
– Leggi il file riga per riga nel ciclo while
– -r impedisce l’interpretazione dei backslash escape
– IFS (Internal Field Separator), se vogliamo dividere la riga con il separatore di campo, è necessario specificare il valore del separatore (Es: se la riga ha un valore come “foo, bar” e si desidera dividere la virgola, allora il valore IFS dovrebbe essere (IFS=,))
– echo aiuterà a stampare il contenuto sulla console
– una volta raggiunta la fine del file, il ciclo esce
Conclusione
Questo tutorial ha spiegato come leggere il contenuto del file riga per riga usando lo script della shell bash con esempi. Aiuta a cercare le stringhe in un file leggendo le righe singolarmente.
Grazie per la lettura, si prega di lasciare i vostri suggerimenti e recensioni nella sezione commenti.