Android

Jak číst soubor řádek po řádku v bash

rEFInd: How to Install and Boot Alternative OS on Mac

rEFInd: How to Install and Boot Alternative OS on Mac

Obsah:

Anonim

Při psaní skriptů Bash se někdy ocitnete v situacích, kdy potřebujete číst řádek po řádku. Například můžete mít textový soubor obsahující data, která by měla být skriptem zpracována.

V tomto tutoriálu diskutujeme o tom, jak číst řádek po řádku v Bash.

Čtení syntaxe řádek po řádku

Nejobecnější syntaxe pro čtení souboru řádek po řádku je následující:

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

nebo ekvivalentní jednořádková verze:

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

Jak to funguje?

Vstupní soubor ( input_file ) je název souboru, který chcete otevřít pro čtení příkazem read . Příkaz read přečte souborový řádek po řádku a každý řádek přiřadí k line proměnné. Po zpracování všech řádků se smyčka while ukončí. Vnitřní oddělovač polí ( IFS ) je nastaven na nulový řetězec, aby se zachoval úvodní a koncový mezera, která je výchozím chováním příkazu read .

Čtení příkladů řádek po řádku

Podívejme se na následující příklad. Předpokládejme, že máme soubor s názvem distros.txt obsahuje seznam některých nejpopulárnějších distribucí Linuxu a jejich správců balíků oddělených čárkou ( , ):

distros.txt

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

Chcete-li číst řádek po řádku, spusťte v terminálu následující kód:

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

Kód přečte soubor po řádku, přiřadí každý řádek k proměnné a echo promění. V zásadě byste viděli stejný výstup, jako kdybyste zobrazovali obsah souboru pomocí příkazu cat.

Co když chcete tisknout pouze distribuce, které používají apt? Jedním ze způsobů by bylo použití příkazu if a kontrola, zda řádek obsahuje podřetězec apt:

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

Ubuntu, apt Debian, apt

Při čtení souboru řádek po řádku můžete také předat více než jednu proměnnou příkazu čtení, který rozdělí řádek do polí na základě IFS . První pole je přiřazeno první proměnné, druhé druhé proměnné atd. Pokud existuje více polí než proměnných, jsou zbývající pole přiřazena poslední proměnné.

V následujícím příkladu nastavujeme IFS na čárku ( , ) a předáváme dvě proměnné distro a pm příkazu read. Všechno od začátku řádku do první čárky bude přiřazeno první proměnné ( distro ) a zbytek řádku bude přiřazen druhé proměnné ( 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

Alternativní metody čtení souborů

Použití substituce procesu

Substituce procesu umožňuje předávat výstup z příkazu jako název souboru:

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

Použití řetězce zde

Here String je varianta dokumentu Here. Řetězec (cat input_file) zachová nové řádky:

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

Pomocí deskriptoru souboru

Vstup do smyčky můžete také zadat pomocí deskriptoru souboru:

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

Při práci s deskriptory souborů použijte číslo mezi 4 a 9, abyste se vyhnuli konfliktu s interními deskriptory souborů prostředí.

Závěr

V Bashu můžeme číst soubor řádek po řádku poskytnutím názvu souboru jako vstupu do smyčky while while čtení.

bash terminál