GNU/Linux >> Znalost Linux >  >> Linux

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

S polem obsazeno nepřichází žádný aplet pro čtení.

Existuje nějaký způsob, jak číst soubor txt řádek po řádku pomocí busybox?

To, co teď mám, je

while read line
do
     echo $line
done < "$InputFile"

Přijatá odpověď:

read je vestavěný shell (nemohl by nastavit proměnnou shellu, kdyby tomu tak nebylo).

Pokud tedy váš busybox sh je založen na ash , je to:

while IFS= read -r line <&3; do
  printf '%sn' "$line"
done 3< "$InputFile"

Jako v každém POSIX shellu. Ale jako u každého shellu, pomocí while read smyčky ke zpracování textu je obecně špatná praxe skriptování v shellu.

Výše potřebujete:

  • IFS= jinak jsou z řádků odstraněny úvodní a koncové mezery a tabulátory
  • -r , jinak jsou zpětná lomítka považována za znak escape a odstraněna (pokud nejsou uvozena)
  • printf , nikoli echo což by nefungovalo pro řádky, které jsou například -nene
  • "$line" v uvozovkách (nikoli $line ) jinak se obsah řádku rozdělí na mezery a tabulátory a rozšíří se kulovité vzory.
  • <&3 a 3< ... , pokud potřebujete přístup k původnímu stdin v rámci smyčky.

Pokud soubor obsahuje znaky za posledním řádkem a chcete je zobrazit, můžete za smyčku přidat:

[ -z "$line" ] || printf %s "$line"

Všimněte si, že tato smyčka nemůže zpracovat binární data (NUL postava).


Linux
  1. Čte Tail celý soubor?

  2. Nemůžete najít soubor k opravě na vstupním řádku 3?

  3. Oprávnění souborů v Linuxu – čtení/zápis/spouštění

  1. VIM:jak přejít na přesnou linku na Ubuntu

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

  3. Proč se v Linuxu používá select

  1. přidat řádek do souboru POUZE pokud v souboru již není

  2. Neblokující získat charakter

  3. unix - rozdělte velký soubor .gz po řádcích