On Thu, 20 Oct 2005 09:57:35 +0200 "Roland M. Kruggel" <[EMAIL PROTECTED]> 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