Android

Kuinka lukea tiedosto riviltä riviltä bash

Customizing Cloud9 and the CS50 IDE by Dan Armendariz

Customizing Cloud9 and the CS50 IDE by Dan Armendariz

Sisällysluettelo:

Anonim

Kun kirjoitat Bash-skriptejä, joudut joskus tilanteisiin, joissa sinun on luettava tiedosto riviltä. Esimerkiksi, sinulla voi olla tekstitiedosto, joka sisältää tietoja, jotka komentosarjan tulisi käsitellä.

Tässä opetusohjelmassa keskustellaan siitä, kuinka tiedosto rivi riviltä luetaan Bashissa.

Tiedostojen lukeminen riviltä syntaksi

Yleisin syntaksi tiedoston lukemiseen rivi riviltä on seuraava:

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

tai vastaava yksirivinen versio:

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

Kuinka se toimii?

Syöttötiedosto ( input_file ) on sen tiedoston nimi, jonka haluat avata lukemiseen read komennolla. Lukukomento lukee tiedosto riviltä riville, määrittämällä jokainen line rivimuuttujalle. Kun kaikki rivit on käsitelty, silmukka loppuu. Sisäinen kenttäerotin ( IFS ) on asetettu nollamerkkijonoon, jotta välilyönti ja takaosan välilyönti voidaan säilyttää, mikä on lukukomennon oletuskäyttäytyminen.

Tiedostojen lukeminen rivi riviltä

Katsotaanpa seuraavaa esimerkkiä. Oletetaan, että meillä on tiedosto nimeltä distros.txt joka sisältää luettelon eräistä suosituimmista Linux-jakeluista ja niiden pakettien distros.txt pilkulla ( , ) erotettuna:

distros.txt

Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf

Voit lukea tiedosto riviltä riviltä suorittamalla seuraavan koodin terminaalissasi:

while IFS= read -r line do echo "$line" done < distros.txt

Koodi lukee tiedoston riviltä, ​​määrittää jokaisen rivin muuttujalle ja kaikuu muuttujaa. Perusteellisuus, jos näkisit saman tulosteen kuin jos näyttäisit tiedoston sisältöä kissan komennolla.

Entä jos haluat tulostaa vain jakelut, jotka käyttävät apt: tä? Yksi tapa on käyttää if-käskyä ja tarkistaa, sisältääkö rivi apt-alijono:

while IFS= read -r line do if]; then echo "$line" fi done < distros.txt

Ubuntu, apt Debian, apt

Kun luet tiedosto rivi riviltä, ​​voit myös siirtää useita muuttujia read-komentoon, joka jakaa rivin kenttiin IFS . Ensimmäinen kenttä osoitetaan ensimmäiselle muuttujalle, toinen toiselle muuttujalle ja niin edelleen. Jos kenttiä on enemmän kuin muuttujia, jäännöskentät osoitetaan viimeiselle muuttujalle.

Seuraavassa esimerkissä asetamme IFS pilkuna ( , ) ja siirrämme kaksi muuttujaa distro ja pm lukukomentoon. Kaikki rivin alusta ensimmäiseen pilkkuun määritetään ensimmäiselle muuttujalle ( distro ) ja loput rivistä toiselle muuttujalle ( 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

Vaihtoehtoiset tiedostojen lukemismenetelmät

Prosessikorvauksen käyttäminen

Prosessikorvauksen avulla voit välittää tulosteen komennosta tiedostonimellä:

while IFS= read -r line do echo "$line" done < <(cat input_file)

Tässä merkkijonon käyttäminen

Here String on variantti Here-dokumentista. Merkkijono (cat input_file) pitää rivit:

while IFS= read -r line do echo "$line" done <<< $(cat input_file)

Tiedostonkuvauksen käyttäminen

Voit myös syöttää silmukan tiedostokuvaajalla:

while IFS= read -r -u9 line do echo "$line" done 9< input_file

Kun käsittelet tiedostokuvauksia, käytä numeroa välillä 4 - 9 välttääksesi ristiriidat kuoren sisäisten tiedostokuvausten kanssa.

johtopäätös

Bash-ohjelmassa voimme lukea tiedoston rivi riviltä tarjoamalla tiedostonimen syötteeksi jonkin aikaa luettavalle silmukalle.

bash-terminaali