Hallo, Am Sun, 13 Feb 2005, Matthias Houdek schrieb:
Am Sonntag, 13. Februar 2005 10:27 schrieb Matthias Houdek:
Am Sonntag, 13. Februar 2005 01:52 schrieb David Haller:
[...] var="$var1. $var1:$var2. $var2;$var3." echo "$var" | sed 's/[ :;]//g;$s/\.$//'
Oh, wieder was dazugelernt.
*g*
Ein $ unmittelbar vor dem s bezieht den Befehl also nur auf die letzte Zeile. Ich kannte die Adressierung immer nur durch direkte Angabe der Zeilennummern. Wäre ja auch möglich, fällt mir gerade auf.
man -L en sed, info sed -> Adresses $ Match the last line. ;)
*nachschau* Hm, man sollte vielleicht doch lieber mehr die englischen Manpages lesen. Da steht es schön übersichtlich. In der deutschen steht es im Text versteckt :-(
:-( Sollte man immer. Vgl. man ls.
Auszug aus man sed:
0,addr2 Start out in "matched first address" state, until addr2 is found. This is similar to 1,addr2, except that if addr2 matches the very first line of input the 0,addr2 form will be at the end of its range, whereas the 1,addr2 form will still be at the beginning of its range.
Achtung: das kann GNU sed auch noch nicht lange, mein sed 3.02 noch nicht.
Was ist die "very first line"?
Die erste eben. ;)
Oder soll dieses Konstrukt einfach nur den Fehler verhindern, der auftreten bei "1,addr2" auftreten wurde, wenn der eventuellen Ausdruck für Adresse 2 gleich Null ergibt?
Vergleiche (mit GNU sed 4.x z.B.): slarty:~# echo -e 'a\nb\nc' | sed -n '0,/a/p' | xargs echo a slarty:~# echo -e 'a\nb\nc' | sed -n '1,/a/p' | xargs echo a b c slarty:~# sed --version GNU sed version 4.0.9 [..] Jedoch: dh@slarty[3]: ~ (0)$ echo -e 'a\nb\nc' | sed -n '1,/a/p' | xargs echo a b c dh@slarty[3]: ~ (0)$ echo -e 'a\nb\nc' | sed -n '0,/a/p' | xargs echo dh@slarty[3]: ~ (0)$ sed --version GNU sed version 3.02 [..] Jedenfalls: Durch die 0 ist sed also noch am Anfang des Bereichs ("range") und matcht auf die RE /a/. Mit 1 wird gemaess the line which addr1 matched will always be accepted, even if addr2 selects an earlier line; and if addr2 is a regexp, it will not be tested against the line that addr1 matched. die RE /a/ _nicht_ mehr geprueft, ergo wird erst ab Zeile 2 auf /a/ getestet und dann erst der Bereich "beendet": slarty:~# echo -e 'a\nb\na\nc' | sed -n '1,/a/p' | xargs echo a b a slarty:~# echo -e 'a\nb\na\nc' | sed -n '0,/a/p' | xargs echo a HTH, -dnh -- Every time I hear someone whining about vi or emacs, I give them ed to play with. Shuts them up PDQ. -- stevo