Pijpen, Grep, Sorteren - Linux Tutorial 9
Inhoudsopgave:
- Een bestand regel voor regel syntax lezen
- Een bestand regel voor regel lezen
- Alternatieve methoden voor het lezen van bestanden
- Een procesvervanging gebruiken
- Een hier-string gebruiken
- Bestandsbeschrijving gebruiken
- Conclusie
Wanneer je Bash-scripts schrijft, kom je soms in situaties terecht waarin je een bestand regel voor regel moet lezen. U hebt bijvoorbeeld een tekstbestand met gegevens dat door het script moet worden verwerkt.
In deze tutorial zullen we bespreken hoe je een bestand regel voor regel in Bash kunt lezen.
Een bestand regel voor regel syntax lezen
De meest algemene syntaxis voor het regel voor regel lezen van een bestand is als volgt:
while IFS= read -r line do echo "$line" done < input_file
of de equivalente versie met één regel:
while IFS= read -r line; do echo $line; done < input_file
Hoe werkt het?
Het invoerbestand (
input_file
) is de naam van het bestand dat u wilt openen voor lezen met de opdracht
read
. De opdracht read leest het bestand regel voor regel en wijst elke regel toe aan de regelvariabele. Zodra alle lijnen zijn verwerkt, wordt de while-lus beëindigd. Het interne veldscheidingsteken (
IFS
) is ingesteld op de null-reeks om voorloop- en volgspaties te behouden, wat het standaardgedrag van de opdracht
read
.
Een bestand regel voor regel lezen
Laten we het volgende voorbeeld bekijken. Stel dat we een bestand met de naam
distros.txt
met een lijst van enkele van de populairste Linux-distributies en hun pakketbeheerders gescheiden door komma (
,
):
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
Om het bestand regel voor regel te lezen, voert u de volgende code in uw terminal uit:
while IFS= read -r line do echo "$line" done < distros.txt
De code leest het bestand per regel, wijst elke regel toe aan een variabele en echo de variabele. Met Basicity ziet u dezelfde uitvoer alsof u de bestandsinhoud weergeeft met de opdracht cat.
Wat als u alleen de distributies wilt afdrukken die apt gebruiken? Een manier zou zijn om de if-instructie te gebruiken en te controleren of de regel de apt-substring bevat:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
Wanneer u het bestand regel voor regel leest, kunt u ook meer dan één variabelen doorgeven aan de opdracht lezen, die de regel in velden splitst op basis van de
IFS
. Het eerste veld wordt toegewezen aan de eerste variabele, het tweede aan de tweede variabele, enzovoort. Als er meer velden zijn dan variabelen, worden de resterende velden toegewezen aan de laatste variabele.
In het volgende voorbeeld stellen we IFS in op een komma (
,
) en geven we twee variabelen
distro
en
pm
aan de opdracht read. Alles vanaf het begin van de regel tot de eerste komma wordt toegewezen aan de eerste variabele (
distro
) en de rest van de regel wordt toegewezen aan de tweede variabele (
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
Alternatieve methoden voor het lezen van bestanden
Een procesvervanging gebruiken
Met procesvervanging kunt u uitvoer van een opdracht doorgeven als bestandsnaam:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Een hier-string gebruiken
Here String is een variant van Here-document. De string
(cat input_file)
behoudt de nieuwe regels:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Bestandsbeschrijving gebruiken
U kunt ook de invoer voor de lus opgeven met behulp van een bestandsdescriptor:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
Gebruik bij het werken met bestandsdescriptors een nummer tussen 4 en 9 om conflicten met interne bestandsdescriptors van de shell te voorkomen.
Conclusie
In Bash kunnen we een bestand regel voor regel lezen door de bestandsnaam op te geven als invoer voor een tijdige leeslus.
bash-terminalE-maillijst Leverancier: onze archieven zijn nauwkeurig E-mailapplicaties, een databasebedrijf, houden de gegevens bij nadat ze ervan zijn beschuldigd een bunk e-mail lijst naar Javelin ... Een bedrijf beschuldigd van slechte zakelijke praktijken voor het vermeend verkopen van een bunk e-maillijst gebruikt voor een marketing campagne handhaaft dat de gegevens goed zijn.
Het geschil tussen Emailappenders en Javelin Marketing biedt een interessante kijk op hoe marketingbedrijven aan de goede kant van de wetgeving moeten blijven, zoals de CAN-SPAM-act in de VS, en hoe e-mail big business is, niet alleen voor spammers. Een overzicht van dotdotdot Reader voor iOS: de beste e-boeklees-app voor schrijvers. Vaak komt u bij het schrijven van Shell-scripts in een situatie terecht waarin u een actie moet uitvoeren op basis van het feit of een bestand bestaat of niet. In Bash kunt u de testopdracht gebruiken om te controleren of een bestand bestaat en het type van het bestand te bepalen.Een overzicht van dotdotdot voor iOS: een coole app voor het lezen van e-boeken
Hoe te controleren of een bestand of map bestaat in bash