So lesen Sie eine Datei Zeile für Zeile im Bash-Skript [3 Methods]

Beim Schreiben von a bash Skript, hängt vom Automatisierungsablauf ab manchmal muss das Skript den Inhalt Zeile für Zeile aus der Datei lesen. Hier lernen wir 3 Methoden in a bash Skript zum zeilenweisen Lesen der Datei.

Methode 1: Verwenden des Input Redirectors

Die einfachste Möglichkeit, eine Datei Zeile für Zeile zu lesen, besteht darin, den Eingabeumleitungsdienst in einer while-Schleife zu verwenden.

Zur Veranschaulichung haben wir eine Beispieldatei namens ‘mycontent.txt’ erstellt und werden sie in diesem Tutorial verwenden.

$ cat mycontent.txt
This is a sample file
We are going through contents
line by line
to understand

Lassen Sie uns ein Skript namens ‘example1.sh’ erstellen, das verwendet Eingang umleiten und Schleife.

$ more example1.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < mycontent.txt

Wie es funktioniert:

– Shell deklarieren, die „bash”
– Während Schleife starten und Zeileninhalt in Variable „y“ speichern
– mache einen Teil der while-Schleife (Startpunkt)
– Echo zum Drucken und “$y” bedeutet, dass der Variablenwert gedruckt wird, z. B. Zeile
– Lesen von Dateiinhalten mit Eingabeumleitung „<“ & Schließen mit Fertig

Ausführung von Skript & Ausgabe:

$ ./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

Methode 2: Verwenden des cat-Befehls

Die zweite Methode besteht darin, den Befehl cat zu verwenden und dann seine zu senden Ausgang wie Eingang bis zur zeit Schleife Verwendung der Rohr.

Erstellen Sie eine Skriptdatei ‘example2.sh’ mit folgendem Inhalt:

$ more example2.sh
#!/bin/bash
cat mycontent.txt | while read y

do
echo "Line contents are : $y "
done

Wie es funktioniert:

– Shell deklarieren, die „bash”
– Ausgabe des cat-Befehls, der als Eingabe an die while-Schleife mit Pipe gesendet wird
“|” und Zeileninhalt in Variable „y“ speichern
– mache einen Teil der while-Schleife (Startpunkt)
– Echo zum Drucken und “$y” bedeutet, dass der Variablenwert gedruckt wird, z. B. Zeile
– Schließen der while-Schleife erledigt

Ausführung von Skript & Ausgabe:

$ ./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

Tipp: Wir können alle Befehle kombinieren und als Oneliner verwenden.

Ausgabe:

$ 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. Als Argument übergebener Dateiname verwenden

Diese dritte Methode sendet den Dateinamen als Eingabeargument über die Befehlszeile.

Erstellen Sie eine Skriptdatei namens ‘example3.sh’ als:

$ more example3.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < $1

Wie es funktioniert:

– Shell deklarieren, die „bash”
– Während Schleife starten und Zeileninhalt in Variable „y“ speichern
– mache einen Teil der while-Schleife (Startpunkt)
– Echo zum Drucken und “$y” bedeutet, dass der Variablenwert gedruckt wird, z. B. Zeile
– Lesen des Dateiinhalts aus dem Befehlszeilenargument, z. B. $1 mit dem Eingabe-Redirector „<“ und Schließen mit done

Ausführung von Skript & Ausgabe:

$ ./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

Umgang mit Backslash und Escape-Zeichen

Wenn der Dateiinhalt Backslash- und Escape-Zeichen enthält, wurden diese Backslash- und Escape-Zeichen mit dem Lesebefehl ignoriert.

Wenn wir alles aus der Datei lesen möchten, verwenden Sie -r Option, um die Interpretation von Backslash-Escapes zu verhindern und den Wert in der Konsole anzuzeigen.

Wenn der Dateiinhalt ein Dateitrennzeichen wie Komma oder Pipe hat, können wir IFS (Internal Field Separator) verwenden, um die Datei basierend auf Trennzeichen aufzuteilen und die Werte anzuzeigen.

Beispiel Shell-Skript:

#!/bin/bash
inputfile="foobar.txt"
while IFS=, read -r y
do
echo $y
done < $inputfile

Skriptablauf:

– Weisen Sie den Dateipfad der Variablen ‘inputfile’ zu
– Während Schleife die Datei Zeile für Zeile lesen
– -r verhindert, dass Backslash-Escapes interpretiert werden
– IFS (Internal Field Separator), wenn wir die Zeile mit einem Feldseparator teilen möchten, müssen Sie den Trennwert angeben (Beispiel: Wenn die Zeile einen Wert wie ‘foo, bar’ hat und das Komma teilen möchte, sollte der IFS-Wert ( IFS=,))
– Echo hilft beim Drucken des Inhalts auf die Konsole
– Sobald das Ende der Datei erreicht ist, während die Schleife herauskommt

Fazit

In diesem Tutorial wurde erklärt, wie Sie den Dateiinhalt zeilenweise mit . lesen bash Shell-Skript mit Beispielen. Es hilft beim Durchsuchen von Zeichenfolgen in einer Datei, indem die Zeilen einzeln gelesen werden.

Vielen Dank fürs Lesen, bitte hinterlassen Sie Ihre Vorschläge und Bewertungen im Kommentarbereich.