Corso di terminale linux - la shell
Sommario:
- Lettura di un file Sintassi riga per riga
- Lettura di un file Esempi linea per linea
- Metodi di lettura dei file alternativi
- Utilizzo di una sostituzione di processo
- Utilizzando una stringa Here
- Utilizzando il descrittore di file
- Conclusione
Quando scrivi gli script di Bash, a volte ti troverai in situazioni in cui devi leggere un file riga per riga. Ad esempio, potresti avere un file di testo contenente dati che dovrebbero essere elaborati dallo script.
In questo tutorial, discuteremo come leggere un file riga per riga in Bash.
Lettura di un file Sintassi riga per riga
La sintassi più generale per la lettura di un file riga per riga è la seguente:
while IFS= read -r line do echo "$line" done < input_file
o la versione equivalente a linea singola:
while IFS= read -r line; do echo $line; done < input_file
Come funziona?
Il file di input (
input_file
) è il nome del file che si desidera aprire per la lettura con il comando
read
. Il comando
read
legge il file riga per riga, assegnando ciascuna riga alla variabile
line
. Una volta elaborate tutte le linee, il ciclo while termina. Il separatore di campo interno (
IFS
) è impostato sulla stringa nulla per preservare gli spazi bianchi iniziali e finali che è il comportamento predefinito del comando
read
.
Lettura di un file Esempi linea per linea
Diamo un'occhiata al seguente esempio. Supponiamo di avere un file chiamato
distros.txt
contenente un elenco di alcune delle distribuzioni Linux più popolari e i loro gestori di pacchetti separati da virgola (
,
):
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
Per leggere il file riga per riga, esegui il seguente codice nel tuo terminale:
while IFS= read -r line do echo "$line" done < distros.txt
Il codice leggerà il file per riga, assegnerà ciascuna riga a una variabile ed eseguirà l'eco della variabile. Basicity vedresti lo stesso output di se visualizzassi il contenuto del file usando il comando cat.
Cosa succede se si desidera stampare solo le distribuzioni che utilizzano apt? Un modo sarebbe usare l'istruzione if e verificare se la riga contiene la sottostringa apt:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
Durante la lettura del file riga per riga, è anche possibile passare più di una variabile al comando read che suddividerà la riga in campi basati
IFS
. Il primo campo viene assegnato alla prima variabile, il secondo alla seconda variabile e così via. Se sono presenti più campi che variabili, i campi rimanenti vengono assegnati all'ultima variabile.
Nel seguente esempio, stiamo impostando IFS su una virgola (
,
) e passando due variabili
distro
e
pm
al comando read. Tutto dall'inizio della riga fino alla prima virgola verrà assegnato alla prima variabile (
distro
) e il resto della riga verrà assegnato alla seconda variabile (
pm
):
while IFS=, read -r distro pm do echo "$pm" is the package manager for "$distro" done < distros.txt
apt is the package manager for Ubuntu apt is the package manager for Debian yum is the package manager for CentOS pacman is the package manager for Arch Linux dnf is the package manager for Fedora
Metodi di lettura dei file alternativi
Utilizzo di una sostituzione di processo
La sostituzione del processo consente di passare l'output dal comando come nome file:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Utilizzando una stringa Here
Here String è una variante del documento Here. La stringa
(cat input_file)
manterrà le nuove righe:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Utilizzando il descrittore di file
Puoi anche fornire l'input al loop usando un descrittore di file:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
Quando si lavora con i descrittori di file, utilizzare un numero compreso tra 4 e 9 per evitare conflitti con i descrittori di file interni della shell.
Conclusione
In Bash, possiamo leggere un file riga per riga fornendo il nome file come input per un ciclo di lettura while.
bash terminalImpossibile salvare il file perché non è possibile leggere il file di origine
Se non è possibile scaricare e vedi appdatalocaltemp impossibile salvare il file sorgente perché non è possibile leggere il file di origine in Firefox, ecco cosa è necessario fare.
Come leggere ebook pdf, chm e file di testo su psp
Scopri come leggere ebook PDF, CHM e file di testo su PSP.
Come leggere come un professionista su OnePlus
Per i lettori che non riescono a ottenere le nozioni di base su come leggere perfettamente sui loro dispositivi Android, abbiamo un'esperienza di prima mano personalizzata descritta solo per te.