Am Sonntag, 13. Februar 2005 16:20 schrieb David Haller:
Hallo,
Am Sun, 13 Feb 2005, Matthias Houdek schrieb:
Am Sonntag, 13. Februar 2005 10:27 schrieb Matthias Houdek:
[ $ als Bereichs-Adressierung in sed ] *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.
Ja, wahrscheinlich. Ich fand die deutschen halt bequemer, weil ich da halt doch besser "diagonal" lesen kann.
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. ;)
Aha, und ich dachte schon die "sehr erste" wäre noch was anderes. Aber wir haben ja auch so einen "Schwachfug": die allererste Zeile - so müsste man es wohl übersetzen. Trotzdem albern.
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 [..]
Ahh, klar. /a/ matcht ja nach der ersten Zeile nicht mehr, also gibt es kein Ende.
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 [..]
Aha. Naja, müsste man allenthalben in Scripten beachten, die ggf. auch auf anderen Systemen laufen sollen.
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,
YTH ;-) BTW: Netter Rechnername *g* -- Gruß MaxX Hinweis 1: PMs an diese Adresse werden automatisch vernichtet. Hinweis 2: Bitte unbedingt beachten: http://www.suse-etikette.de.vu