sed: Easily replace strings across files | #7 Practical Bash
Innehållsförteckning:
- Läsa en fil rad för rad syntax
- Läsa en fil rad för rad exempel
- Alternativa filläsningsmetoder
- Använda en processsubstitution
- Använda en här sträng
- Med hjälp av filbeskrivning
- Slutsats
När du skriver Bash-skript kommer du ibland att befinna dig i situationer där du behöver läsa en fil rad för rad. Till exempel kan du ha en textfil som innehåller data som ska behandlas av skriptet.
I denna handledning kommer vi att diskutera hur du läser en fil rad för rad i Bash.
Läsa en fil rad för rad syntax
Den vanligaste syntaxen för att läsa en fil rad för rad är som följer:
while IFS= read -r line do echo "$line" done < input_file
eller motsvarande enkelradiga version:
while IFS= read -r line; do echo $line; done < input_file
Hur fungerar det?
Inmatningsfilen (
input_file
) är namnet på filen du vill vara öppen för läsning med läsningskommandot.
read
kommandot läser fil rad för rad och tilldelar varje rad till radvariabeln. När alla rader har bearbetats avslutas medan-loopen. Den interna fältavskiljaren (
IFS
) är inställd på nollsträngen för att bevara ledande och efterföljande vitrum som är standardbeteendet för läskommandot.
Läsa en fil rad för rad exempel
Låt oss ta en titt på följande exempel. Anta att vi har en fil med namnet
distros.txt
innehåller en lista över några av de mest populära Linux-distributionerna och deras pakethanter separerade med komma (
,
):
Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf
För att läsa filen rad för rad kör du följande kod i din terminal:
while IFS= read -r line do echo "$line" done < distros.txt
Koden läser filen för rad, tilldelar varje rad till en variabel och eko variabeln. I grunden skulle du se samma utgång som om du skulle visa filinnehållet med kattkommandot.
Tänk om du bara vill skriva ut de distributioner som använder apt? Ett sätt skulle vara att använda if-satsen och kontrollera om raden innehåller apt substring:
while IFS= read -r line do if]; then echo "$line" fi done < distros.txt
Ubuntu, apt Debian, apt
När du läser fil rad för rad kan du också skicka mer än en variabel till läsekommandot som delar upp raden i fält baserade på
IFS
. Det första fältet tilldelas den första variabeln, det andra till den andra variabeln och så vidare. Om det finns fler fält än variabler tilldelas resterande fält till den sista variabeln.
I följande exempel ställer vi IFS till ett komma (
,
) och
distro
två variabler
distro
och
pm
till läs-kommandot. Allt från början av raden tills den första komma kommer att tilldelas den första variabeln (
distro
) och resten av linjen tilldelas den andra variabeln (
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
Alternativa filläsningsmetoder
Använda en processsubstitution
Processersättning gör att du kan skicka utdata från kommandot som filnamn:
while IFS= read -r line do echo "$line" done < <(cat input_file)
Använda en här sträng
Here String är en variant av Here-dokument. Strängen
(cat input_file)
behåller de nya linjerna:
while IFS= read -r line do echo "$line" done <<< $(cat input_file)
Med hjälp av filbeskrivning
Du kan också ge inmatningen till loopen med en filbeskrivning:
while IFS= read -r -u9 line do echo "$line" done 9< input_file
När du arbetar med filbeskrivningar använder du ett nummer mellan 4 och 9 för att undvika konflikt med interna filbeskrivare.
Slutsats
I Bash kan vi läsa en fil rad för rad genom att tillhandahålla filnamnet som en inmatning till en stundlässlinga.
bash terminalLedamöter av Europaparlamentet kommer att avgöra om en rad frågor, bland annat hur man reglerar telekomföretag i EU, hur man straffar företag som snedvrider konkurrensen, hur man delar radiofrekvenser som släpps av TV: s migrering till digital sändning och hur man skyddar medborgarnas data i den digitala tiden.
Men de är delade om huruvida IP-adresser ska ses som personuppgifter. "Vi kommer att be kommissionen att formellt lägga fram en rapport om detta", säger Malcolm Harbour, en brittisk konservativ parlamentsledamot som spelar en central roll för att hylla den så kallade telekomrevisionen genom parlamentet.
Den 23 juni introducerade Motorola Droid, som släpptes för release den här torsdagen, kallar den för "en hemmabio i pocket-storlek". Det är en intressant slogan för en telefon. Jag kan uppskatta funktionen, men hur gagnar den den genomsnittliga arbetaren? Jag kan se fördelen för reklambyråer, multimedieföretag och kanske filmkritiker, men hur är det med resten av företagen som bara behöver en bra, pålitlig telefon?
Varje gång jag läser nyheterna finns ett pressmeddelande för en ny smartphone, bärbar dator, bärbar dator, netbook, e-läsare, skrivare och så vidare. Tävlingen är så intensiv att köpbeslut måste vara en mardröm för det genomsnittliga bolaget. Du behöver nästan skapa en avdelning speciellt för att undersöka IT och elektroniska alternativ. Och den värsta delen är hur kan någon göra ett intelligent köpbeslut när allt som ditt företag köper är föråldrat på mindre än en månad?
Hur man kontrollerar om en fil eller katalog finns i bash
Många gånger när du skriver Shell-skript kan du befinna dig i en situation där du behöver utföra en åtgärd baserad på om en fil finns eller inte. I Bash kan du använda testkommandot för att kontrollera om det finns en fil och bestämma filtypen.