GNU/Linux >> Znalost Linux >  >> Linux

Jak procházet řádky souboru?

Řekněme, že mám tento soubor:

hello
world
hello world

Tento program

#!/bin/bash

for i in $(cat $1); do
    echo "tester: $i"
done

výstupy

tester: hello
tester: world
tester: hello
tester: world

Chtěl bych mít for iterujte přes každý řádek jednotlivě, ignorujte však mezery, tj. poslední dva řádky by měly být nahrazeny

tester: hello world

Použití uvozovek for i in "$(cat $1)"; výsledkem je i přiřazení celého souboru najednou. Co bych měl změnit?

Přijatá odpověď:

(o 9 let později:)
Obě poskytnuté odpovědi by selhaly na souborech bez nového řádku na konci, což by fakticky přeskočilo poslední řádek, nevytvářelo by žádné chyby, vedlo by to ke katastrofě (naučené těžce:).

Nejlepší stručné řešení, které jsem zatím našel, že „Just Works“ (v bash i sh):

while IFS='' read -r LINE || [ -n "${LINE}" ]; do
    echo "processing line: ${LINE}"
done < /path/to/input/file.txt

Podrobnější diskusi najdete v této diskusi StackOverflow:Jak použít „při čtení“ (Bash) ke čtení posledního řádku v souboru, pokud na konci souboru není žádný nový řádek?

Pozor:tento přístup přidá další nový řádek na poslední řádek, pokud tam ještě žádný není.


Linux
  1. Jak připojit více řádků k souboru?

  2. Jak použít sed k odstranění posledních n řádků souboru

  3. Jak mohu přidat řetězec na začátek každého řádku v souboru?

  1. Jak získat pouze počet řádků souboru

  2. Jak mohu zacyklit výstup příkazu shellu?

  3. Jak vložím text do 1. řádku souboru pomocí sed?

  1. Jak extrahovat soubor tar.gz v Linuxu pomocí příkazového řádku

  2. Jak vymazat obsah souboru z příkazového řádku?

  3. Jak vytisknout poslední řádek komprimovaného souboru gz na příkazovém řádku?