Ú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
$file
proměnná je definována za řádkem shebang (první řádek ve skriptech Bash) a ukládá cestu ke vstupnímu souboru, který chcete zpracovat.
-r
argument připojený kread
pří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
$line
variabilní. V rámciwhile
smyčky, příkaz echo vytiskne$line
obsah proměnné.-e
argument umožňujeecho
k interpretaci speciálních znaků, jako je znak nového řádku\n
.
while
smyč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
$file
proměnná ukládá obsah vstupního souboru pomocícat
příkaz.
- Položka
for
smyčka prochází každý řádekcat
výstup příkazu a vytiskne jej pomocíecho
dokud 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
while
smyčka,IFS=
argument je prázdný řetězec, aby se zabránilo ořezávání mezer.
-r
argument zabraňuje interpretaci znaků s escapováním zpětného lomítka.
printf
pří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ácat
výstup příkazu doread
pří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
while
smyčky, dejte pokyn kread
příkaz ke čtení vstupu z deskriptoru souboru zadáním-u
argument 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.
printf
příkaz zpracovává vstup$line
proměnná jako řetězec (%s
) a přidá znak nového řádku (\n
) po vytištění$line
obsah.
- Číslo
9<
syntaxe obsahuje stejné číslo deskriptoru souboru jako vwhile
smyč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
cat
vstupní soubor uzavřený v závorkách<(cat [input_file_path]
k odeslání výsledku procesu doread
pří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.