Úvod
Čtení souboru řádek po řádku umožňuje efektivně zpracovat obsah souboru a vydat každý řádek jako prvek seznamu. Po zobrazení každého řádku samostatně můžete snadno vyhledat nebo najít jakýkoli konkrétní obsah.
Jedním ze způsobů, jak číst textový soubor v jednotlivých řádcích, je použít shell Bash.
V tomto tutoriálu se naučíte číst soubor řádek po řádku v Bash.
Předpoklady
- Systém se systémem Linux.
- Přístup k terminálu (Ctrl + Alt + T ).
- Textový editor (například Nano nebo vi/vim).
Čtení řádek po řádku v bash
Existuje několik metod pro čtení souboru řádek po řádku pomocí Bash. Následující části zdůrazňují pět metod pro zpracování souboru jeden řádek po druhém pomocí Bash.
Metoda 1:Použití příkazu čtení a smyčky while
První metodou je použití příkazu read a while smyčka ve skriptu Bash. I když je možné udělat totéž v terminálu, skripty Bash ukládají kód a umožňují jej znovu použít. Postupujte podle následujících kroků:
1. Otevřete terminál (Ctrl + Alt + T ) a vytvořte nový skript Bash pomocí textového editoru, jako je vi/vim:
vi line.sh 2. Zadejte následující řádky:
#!/bin/bash
file="days.txt"
while read -r line; do
echo -e "$line\n"
done <$file - Soubor
$fileproměnná je definována za řádkem shebang (první řádek ve skriptech Bash) a ukládá cestu ke vstupnímu souboru, který chcete zpracovat.
-rargument připojený kreadpříkaz zabrání interpretaci jakýchkoli znaků uniklých zpětným lomítkem při čtení obsahu souboru.
- Obsah každého řádku je uložen v
$linevariabilní. V rámciwhilesmyčky, příkaz echo vytiskne$lineobsah proměnné.-eargument umožňujeechok interpretaci speciálních znaků, jako je znak nového řádku\n.
whilesmyčka pokračuje, dokud nedosáhne konce souboru a smyčka neskončí.
3. Uložte skript a ukončete vi:
:wq 4. Spusťte skript:
bash line.sh
Skript vypíše každý řádek ukázkového textového souboru samostatně.
Metoda 2:Použití příkazu cat a pro smyčku
Další metodou zobrazení obsahu souboru na jednotlivých řádcích je použití příkazu cat a for smyčka. for smyčka umožňuje echo vytisknout řádky z cat výstup příkazu, dokud nedosáhne konce souboru.
Postupujte podle následujících kroků:
1. Vytvořte nový skript:
vi readfile.sh 2. Zadejte následující řádky:
#!/bin/bash
file=$(cat days.txt)
for line in $file
do
echo -e "$line\n"
done - Soubor
$fileproměnná ukládá obsah vstupního souboru pomocícatpříkaz.
- Položka
forsmyčka prochází každý řádekcatvýstup příkazu a vytiskne jej pomocíechodokud nedosáhne konce souboru.
3. Uložte skript a ukončete vi:
:wq 4. Spusťte skript:
bash readfile.sh
Skript vypíše obsah souboru řádek po řádku ve standardním výstupu.
Metoda 3:Použití zde řetězců
Další metodou tisku obsahu souboru řádek po řádku je použití here řetězec pro předání obsahu souboru ke read příkaz. here string spojuje obsah proměnné, řetězce nebo souboru zadaného za <<< syntaxe na standardní vstup vyvolaného programu.
Postupujte podle následujících kroků:
1. Vytvořte nový skript Bash:
vi herestrings.sh 2. Zadejte následující řádky:
#!/bin/bash
while IFS= read -r line; do
printf '%s\n' "$line"
done <<< $(cat days.txt ) - V
whilesmyčka,IFS=argument je prázdný řetězec, aby se zabránilo ořezávání mezer.
-rargument zabraňuje interpretaci znaků s escapováním zpětného lomítka.
printfpříkaz vytiskne každý řádek souboru. Specifikátory formátu považují vstup za řetězec (%s) a přidejte znak nového řádku (\n) za každým řádkem.
hereřetězec dodávácatvýstup příkazu doreadpříkaz.
3. Uložte skript a ukončete editor:
:wq 4. Spusťte skript:
bash herestrings.sh
Výstup vytiskne obsah souboru řádek po řádku.
Metoda 4:Použití deskriptorů souborů
Deskriptor souboru odkazuje na otevřený soubor nebo proces. Každý proces má tři výchozí deskriptory souborů:
0. Standardní vstup.1. Standardní výstup.2. Standardní chyba.
Zadejte vstup pro read pomocí deskriptoru souboru a vypíše každý řádek z obsahu souboru samostatně. Postupujte podle následujících kroků:
1. Vytvořte nový bash skript:
vi descriptors.sh 2. Zadejte následující řádky:
#!/bin/bash
while IFS= read -r -u9 line; do
printf '%s\n' "$line"
done 9< days.txt - V
whilesmyčky, dejte pokyn kreadpříkaz ke čtení vstupu z deskriptoru souboru zadáním-uargument a číslo deskriptoru souboru.
Důležité: Při zadávání deskriptorů souborů použijte číslo mezi 4 a 9, abyste se vyhnuli konfliktu s interními popisovači souborů shellu.
printfpříkaz zpracovává vstup$lineproměnná jako řetězec (%s) a přidá znak nového řádku (\n) po vytištění$lineobsah.
- Číslo
9<syntaxe obsahuje stejné číslo deskriptoru souboru jako vwhilesmyčka. Obsah vstupního souboru je odeslán do určeného deskriptoru souboru.
3. Uložte skript:
:wq 4. Spuštěním skriptu otestujte kód:
bash descriptors.sh
Výstup skriptu vytiskne každý řádek souboru samostatně.
Metoda 5:Použití substituce procesů
Substituce procesu umožňuje, aby se standardní výstup procesu (nebo procesů) objevil jako soubor a vložil jej do standardního vstupu jiného procesu. Použijte substituci procesu k dodání vstupního souboru a vytiskněte každý řádek souboru samostatně.
Postupujte podle následujících kroků:
1. Vytvořte skript Bash:
vi substitution.sh 2. Zadejte následující řádky:
#!/bin/bash
while IFS= read -r line; do
printf '%s\n' "$line"
done < <(cat days.txt) - Po uzavření smyčky
catvstupní soubor uzavřený v závorkách<(cat [input_file_path]k odeslání výsledku procesu doreadpříkaz.
Důležité: Dejte pozor, abyste mezi < nepřidávali mezery znak a levá závorka ( . Použití bílého znaku interpretuje kód jako přesměrování a vede k chybě.
3. Uložte skript:
:wq 4. Spusťte skript:
bash substitution.sh
Každý řádek souboru je vytištěn samostatně ve standardním výstupu.