írásakor Bash szkriptek, akkor néha találja magát olyan helyzetekben, ahol meg kell olvasni a fájl sort soronként. Például lehet, hogy van egy szöveges fájl, amely adatokat tartalmaz, amelyeket a szkriptnek kell feldolgoznia.

ebben az oktatóanyagban megvitatjuk, hogyan lehet egy fájlvonalat soronként olvasni a Bash-ben.,

Fájlsor olvasása soronkénti szintaxis szerint #

a fájl soronkénti olvasásának legáltalánosabb szintaxisa a következő:

while IFS= read -r line; do printf '%s\n' "$line"done < input_file

vagy az egyenértékű egysoros verzió:

while IFS= read -r line; do printf '%s\n' "$line"; done < input_file

hogy működik ?

a bemeneti fájl (input_file) a while hurokba átirányított fájl neve. Aread parancs a fájlvonalat soronként dolgozza fel, minden sort hozzárendelve aline változóhoz. Az összes sor feldolgozása után a while hurok megszűnik.,

alapértelmezés szerint a read parancs a backslash-et escape karakterként értelmezi, és eltávolítja az összes vezető-és hátsó fehér teret, ami néha váratlan viselkedést okozhat. A backslash escaping letiltásához a -r parancsra hivatkozunk, a vágás letiltásához pedig a belső mező elválasztó (IFS) törlődik.

a echo helyett a kód hordozhatóbbá tétele és a nem kívánt viselkedés elkerülése érdekében használjuk., Például, ha a sor olyan értékeket tartalmaz, mint a”- e”, akkor echo opcióként kell kezelni.

Fájlsor olvasása soronként példák #

vessünk egy pillantást a következő példára. Tegyük fel, hogy van egy distros.txt nevű fájlunk, amely tartalmazza a legnépszerűbb Linux disztribúciók listáját, valamint csomagkezelőiket vesszővel elválasztva (,):

distros.,txt
Ubuntu,aptDebian,aptCentOS,yumArch Linux,pacmanFedora,dnf

a fájl soronkénti olvasásához a következő kódot futtatná a terminálon:

while IFS= read -r line; do printf '%s\n' "$line"done < distros.txt

a kód soronként olvassa a fájlt, minden sort egy változóhoz rendel, majd kinyomtatja. Alapvetően ugyanazt a kimenetet látja, mintha a fájl tartalmát a cat paranccsal jelenítené meg.

mi van, ha csak az apt-t használó disztribúciókat szeretné kinyomtatni?, Ennek egyik módja, hogy használja a if nyilatkozatot, továbbá ellenőrizze a vonalat tartalmaz, az apt substring :

while IFS= read -r line; do if ]; then printf '%s\n' "$line" fidone < distros.txt
Ubuntu,aptDebian,apt

olvasva a fájl soronként, akkor is át több, mint egy változó, hogy a read parancs, ami szét a vonalat mezők alapján IFS. Az első mező az első változóhoz van hozzárendelve, a második a második változóhoz stb. Ha több mező van, mint változó, a maradék mezők az utolsó változóhoz vannak hozzárendelve.,

a következő példában aIFS értéket vesszőre állítottuk (,), és két változótdistro éspmread parancs.,erything a kezdetektől a határt, addig, amíg az első vessző lesz rendelve az első változó (distro), a többi vonal lesz rendelve a második változó (pm):

while IFS=, read -r distro pm; do printf '%s is the package manager for %s\n' "$pm" "$distro"done < distros.txt
apt is the package manager for Ubuntuapt is the package manager for Debianyum is the package manager for CentOSpacman is the package manager for Arch Linuxdnf is the package manager for Fedora

Alternatív Fájl Olvasási Módszerek #

a Folyamat Helyettesítő #

a Folyamat helyettesítő olyan funkció, amely lehetővé teszi, hogy a kimenet a parancs egy fájl:

while IFS= read -r line; do printf '%s\n' "$line"done < <(cat input_file )

Használata Itt String #

Itt a Karakterlánc egy változata Itt dokumentum ., A string (cat input_file ) tartja a újsor:

while IFS= read -r line; do printf '%s\n' "$line"done <<< $(cat input_file )

A Fájl leíró #

Azt is biztosítani, hogy a bemenő, hogy a hurok segítségével egy fájl leíró:

while IFS= read -r -u9 line; do printf '%s\n' "$line"done 9< input_file

Amikor a dolgozó fájl leíró , használja a szám között 4 9 konfliktus elkerülése a héj belső fájl leíró.

következtetés #

a Bash-ben egy fájlsor-Sort olvashatunk egy while loop és a read parancs segítségével.