Zoeken…


parameters

Parameter Details
IFS Intern veldscheidingsteken
het dossier Een bestandsnaam / pad
-r Voorkomt backslash-interpretatie bij gebruik met lezen
-t Hiermee verwijdert u een nieuwe regel uit elke regel die wordt gelezen door readarray
-d DELIM Ga door totdat het eerste teken van DELIM is gelezen (met read ), in plaats van een nieuwe regel

Leest bestand (/ etc / passwd) regel voor regel en veld voor veld

#!/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 het Unix-wachtwoordbestand wordt gebruikersinformatie regel voor regel opgeslagen, waarbij elke regel bestaat uit informatie voor een gebruiker gescheiden door een dubbele punt (:). In dit voorbeeld wordt de regel bij het lezen van het bestand regel voor regel gesplitst in velden met een dubbele punt als scheidingsteken, wat wordt aangegeven door de waarde die is opgegeven voor IFS.

Voorbeeld invoer

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

Voorbeelduitvoer

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

Om regel voor regel te lezen en de hele regel aan variabele toe te wijzen, volgt hier een gewijzigde versie van het voorbeeld. Merk op dat we slechts één variabele op naamregel hebben die hier wordt vermeld.

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

Voorbeeld invoer

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

Voorbeelduitvoer

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

Lees regels van een bestand in een array

readarray -t arr <file

Of met een lus:

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

Regel voor regel door een bestand bladeren

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

Als het bestand aan het einde geen nieuwe regel bevat, dan:

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

Lees lijnen van een string in een array

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

of met een lus:

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

Lijn voor lijn door een string doorlussen

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

of

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

De uitvoer van een opdracht regel voor regel doorlopen

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

of met een pijp:

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

Lees een bestand veld voor veld

Laten we aannemen dat het veldscheidingsteken : (dubbele punt) in het bestand is .

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

Voor een inhoud:

first : se
con
d:
    Thi rd:
    Fourth

De output is:

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

Lees een tekenreeks veld voor veld

Laten we aannemen dat het veldscheidingsteken is :

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

Output:

-line-
- 1
line-
- 2
line3
-

Lees velden van een bestand in een array

Laten we aannemen dat het veldscheidingsteken is :

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

Lees velden van een string in een array

Laten we aannemen dat het veldscheidingsteken is :

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

Output:

newline

Veld voor veld door de uitvoer van een opdracht bladeren

Laten we aannemen dat het veldscheidingsteken is :

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

Of met een pijp:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow