Articles

Door de inhoud van een bestand in Bash

vaak is het een vereiste om elke regel uit een bestand te lezen met behulp van een bash script. Er zijn verschillende benaderingen om de regels van een bestand te lezen. In het onderstaande voorbeeld hebben we eerst beschreven hoe je een voorbeeldbestand maakt en vervolgens een script uitvoert om dat voorbeeldbestand te lezen.

Maak een bestand aan om

# Open vi Editorvi a_file.txt# Input the below linesMondayTuesdayWednesdayThursdayFridaySaturdaySunday# cat the filecat a_file.txt

het uitvoeren van de bovenstaande code geeft ons het volgende resultaat −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

gebruikmakend van Do-While

In deze benadering gebruiken we een do-while lus om een bestand te lezen., We geven de bestandsnaam als invoer aan het einde van het bestand. Eerst maken we een script aan en geven er de uitvoerrechten aan. Dan alleen het kan het bestand te lezen en het resultaat te tonen.

#!/bin/bashwhile read LINEdo echo "$LINE"done < a_file.txt

het uitvoeren van de bovenstaande code geeft ons het volgende resultaat −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

gebruikend voor en in

In de volgende benadering gebruiken we een For loop samen met de in-clausule. Hier slaan we het resultaat van het cat commando (dat elke regel is) op in een variabele die deel uitmaakt van for loop en echo de variabele.,

#!/bin/bashfile=a_file.txtfor i in `cat $file`doecho "$i"done

het uitvoeren van de bovenstaande code geeft ons het volgende resultaat −

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

met alleen echo

We kunnen ook de inhoud van het bestand verkrijgen door alleen echo te gebruiken. Maar het resultaat zal komen als een array van lijnen en afgedrukt als één-lijn uitvoer tonen combinatie van alle lijnen.

echo $( < a_file.txt )

het uitvoeren van de bovenstaande code geeft ons het volgende resultaat:

Monday Tuesday Wednesday Thursday Friday Saturday Sunday

het lezen van een bestand met lege regels

als een bestand een aantal regels bevat die leeg zijn, kunnen we deze vermijden in de uitvoer door de volgende code te gebruiken., Dit maakt gebruik van de IFS (internal Field Separator) is ingesteld op lege tekenreeks, zodat de lege regels worden behandeld als veld scheidingsteken en vermeden in de uitvoer. Aangenomen dat er lege regels zijn tussen de 3e en 4e regel, zullen die lege pandrechten niet worden afgedrukt.

#!/bin/bashwhile IFS = read -r LINEdo echo "$LINE"done < a_file.txt

het Uitvoeren van de bovenstaande code geeft ons het volgende resultaat:

MondayTuesdayWednesdayThursdayFridaySaturdaySunday

Gepubliceerd op 03-Jan-2020 11:45:05

Advertenties