Re: Shell: for-schleife über Zeilen einer Datei

From: Till Toenges <tt(at)kyon.de>
Date: Mon, 23 Feb 2009 00:22:45 +0100

Timm Wimmers wrote:
> for INDEX in `cat <FILE>`; do
> echo $INDEX
> done
>
> Mit was muss ich "cat" ersetzen, damit _keine_ leeren Zeilen und
> Kommentare an die Schleife übergeben werden? Irgendwas gabs da mal, mir
> fällt es grad nicht ein.

Wenn Du nur Zeilen unterdrücken möchtest, die leer sind oder mit # oder
sowas beginnen, ist das kein Problem:

grep -vE '^[[:space:]]*(#.*|)$'

Filtert alle Zeilen, die leer sind, oder nur Whitespace enthalten, oder
in denen das erste Nicht-Whitespace-Zeichen ein # ist. Sieht dann so aus:

for INDEX in `grep -vE '^[[:space:]]*(#.*|)$' <FILE>`; do
        echo $INDEX
done

Wenn Du aber Kommentare entfernen willst, die auch am Ende der Zeile
kommen können, wird es schwieriger. Klar, kann man auch naiv
abschneiden, beispielsweise mit sed. Aber dann kommt man in
Schwierigkeiten, falls das # in einem gequoteten String sein darf. Also
etwa sowas:

# Kommentar
KEIN_KOMMENTAR="Dies ist ein # ohne Kommentar"
KOMMENTAR_AM_ENDE="Gleich kommt der Kommentar" # Das ist er
AUCH_KEIN_KOMMENTAR="Dies ist auch kein \"#\" Kommentar"
NOCH_EIN_KOMMENTAR="Dies ist auch kein \"#\" Kommentar" # Das schon

Oder noch viel komplizierteres, wer weiss, was Du da für Files hast. Da
reichen reguläre Ausdrücke nicht, dann braucht man schon einen
geeigneten Parser. Suchst Du sowas?

Schöne Grüße,

Till

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 23 Feb 2009 - 00:22:49 CET

search this site