GNU/Linux >> Znalost Linux >  >> Linux

Jak číst soubory řádek po řádku v Bash

Ú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ý k read 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ámci while smyčky, příkaz echo vytiskne $line obsah proměnné. -e argument umožňuje echo 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ý řádek cat 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 do read 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 k read 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 v while 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 do read 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.


Linux
  1. Jak přidat čísla řádků do textových souborů v systému Linux

  2. Jak rozdělit a kombinovat soubory z příkazového řádku v Linuxu

  3. Zaneprázdněná schránka Číst soubor řádek po řádku?

  1. Jak v Bash přidám řetězec za každý řádek v souboru?

  2. Jak analyzovat soubor CSV v Bash?

  3. Čtěte řádek po řádku v bash skriptu

  1. Jak odstranit soubory a adresáře v Linuxu z příkazového řádku

  2. Jak číst předposlední řádek v souboru pomocí Bash?

  3. Jak načíst poslední řádek textového souboru do proměnné pomocí Bash?