Suche…


Parameter

Parameter Einzelheiten
IFS Internes Feldtrennzeichen
Datei Ein Dateiname / Pfad
-r Verhindert die Interpretation des Backslash, wenn er mit read verwendet wird
-t Entfernt aus jeder Zeile, die von readarray gelesen wird, eine nachgestellte Zeile
-d DELIM Fortfahren , bis das erste Zeichen von DELIM gelesen (mit read ), anstatt Newline

Liest die Datei (/ etc / passwd) Zeile für Zeile und Feld für Feld

#!/bin/bash
FILENAME="/etc/passwd"
while IFS=: read -r username password userid groupid comment homedir cmdshell
do
  echo "$username, $userid, $comment $homedir"
done < $FILENAME

In der Unix-Kennwortdatei werden Benutzerinformationen Zeile für Zeile gespeichert. Jede Zeile besteht aus Informationen für einen Benutzer, die durch einen Doppelpunkt (:) getrennt sind. In diesem Beispiel wird die Zeile beim Lesen der Datei Zeile für Zeile in Felder mit Doppelpunkt als Trennzeichen aufgeteilt, was durch den für IFS angegebenen Wert angegeben wird.

Probeneingang

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin

Beispielausgabe

mysql, 27, MySQL Server /var/lib/mysql
pulse, 497, PulseAudio System Daemon /var/run/pulse
sshd, 74, Privilege-separated SSH /var/empty/sshd
tomcat, 91, Apache Tomcat /usr/share/tomcat6
webalizer, 67, Webalizer /var/www/usage

Um Zeile für Zeile zu lesen und die gesamte Zeile der Variablen zugewiesen zu haben, folgt eine modifizierte Version des Beispiels. Beachten Sie, dass hier nur eine Variable mit der Namenszeile angegeben wird.

#!/bin/bash
FILENAME="/etc/passwd"
while IFS= read -r line
do
  echo "$line"
done < $FILENAME

Probeneingang

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin

Beispielausgabe

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin

Liest Zeilen einer Datei in ein Array

readarray -t arr <file

Oder mit einer Schleife:

arr=()
while IFS= read -r line; do
   arr+=("$line")
done <file

Durchlaufen Sie eine Datei Zeile für Zeile

while IFS= read -r line; do
   echo "$line"
done <file

Wenn die Datei am Ende keine neue Zeile enthält, gilt Folgendes:

while IFS= read -r line || [ -n "$line" ]; do
   echo "$line"
done <file

Liest Zeilen eines Strings in ein Array

var='line 1
line 2
line3'
readarray -t arr <<< "$var"

oder mit einer Schleife:

arr=()
while IFS= read -r line; do
   arr+=("$line")
done <<< "$var"

Durchlaufen Sie einen String Zeile für Zeile

var='line 1
line 2
line3'
while IFS= read -r line; do
   echo "-$line-"
done <<< "$var"

oder

readarray -t arr <<< "$var"
for i in "${arr[@]}";do
    echo "-$i-"
done

Die Ausgabe eines Befehls zeilenweise durchlaufen

while IFS= read -r line;do
    echo "**$line**"
done < <(ping google.com)

oder mit einer Pfeife:

ping google.com |
while IFS= read -r line;do
    echo "**$line**"
done

Lesen Sie eine Datei Feld für Feld

Nehmen wir an, das Feldtrennzeichen lautet : (Doppelpunkt) in der Datei .

while IFS= read -d : -r field || [ -n "$field" ]; do
   echo "$field"
done <file

Für einen Inhalt:

first : se
con
d:
    Thi rd:
    Fourth

Die Ausgabe ist:

**first **
** se
con
d**
**
    Thi rd**
**
    Fourth
**

Liest eine Zeichenfolge Feld für Feld

Nehmen wir an, das Feldtrennzeichen lautet :

var='line: 1
line: 2
line3'
while IFS= read -d : -r field || [ -n "$field" ]; do
   echo "-$field-"
done <<< "$var"

Ausgabe:

-line-
- 1
line-
- 2
line3
-

Liest Felder einer Datei in ein Array

Nehmen wir an, das Feldtrennzeichen lautet :

arr=()
while IFS= read -d : -r field || [ -n "$field" ]; do
   arr+=("$field")
done <file

Liest Felder eines Strings in ein Array

Nehmen wir an, das Feldtrennzeichen lautet :

var='1:2:3:4:
newline'
arr=()
while IFS= read -d : -r field || [ -n "$field" ]; do
   arr+=("$field")
done <<< "$var"
echo "${arr[4]}"

Ausgabe:

newline

Durchlaufen der Ausgabe eines Befehlsfelds für Feld

Nehmen wir an, das Feldtrennzeichen lautet :

while IFS= read -d : -r field || [ -n "$field" ];do
    echo "**$field**"
done < <(ping google.com)

Oder mit einer Pfeife:

ping google.com | while IFS= read -d : -r field || [ -n "$field" ];do
    echo "**$field**"
done


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow