[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Zeilen numerieren



On Thu, 20 Oct 2005 09:57:35 +0200
"Roland M. Kruggel" <rk-liste@gmx.de> wrote:

> > > l=1; cat ascii-date | while read line; do
> > >     echo $line | sed -e "s/#[0-9]*$/$l/g"; l=$((l+1));
> > > done
> >
> > Wenn "line" jedoch mehrere aufeinander folgende Freizeichen
> > enthält, werden diese als Whitespace geschluckt und zu einem
> > Freizeichen reduziert. Auch z.B. ein * wird noch expandiert.
> 
> Nein. Ich habe es so am laufen und es funktioniert einwandfrei. Ich
> versehen die REJECT's in postfix header- und body_checks so mit
> einer eindeutigen Nummer.

Naja, ich weiß ja nicht wie einzelnen Zeilen deiner Eingabedaten so
aussehen, aber folgendes Beispiel zeigt IMHO ganz gut was (mit der
Bash) nicht unbedingt wie erwartet funktioniert:

| bash$ ls                  # das liegt im Verzeichnis:
| andere_datei  ascii-date
| bash$ cat ascii-date      # so sieht die Eingabe aus:
| foo  bar * #
| foo        #
|      bar   #
| bash$ l=1; cat ascii-date | while read line; do
| >     echo $line | sed -e "s/#[0-9]*$/$l/g"; l=$((l+1));
| > done                    # und das wird draus gemacht:
| foo bar andere_datei ascii-date 1
| foo 2
| bar 3
| bash$ 

Doppelte Freizeichen weg, Stern expandiert.

> > Abhilfe: $line in Anführungszeichen setzen:

Ist auch noch nicht die optimale Lösung. Anscheinend werden hier
immernoch Freizeichen am Anfang einer Zeile geschluckt (von "read
line" ?):

| bash$ l=1; cat ascii-date | while read line; do
| >     echo "$line" | sed -e "s/#[0-9]*$/$l/g"; l=$((l+1));
| > done                    # auch noch nicht perfekt:
| foo  bar * 1
| foo        2
| bar   3
| bash$ 

Dafür kenne ich keine Lösung.


Gruß,

Christian Bodenstedt



Reply to: