Eine Variable setzt sich aus vorhergenden anderen Variablen zusammen. In dieser Variable sollen bestimmte Zeichen, zb [ :;] mit sed ersetzt werden, das auch vom Verständnis klar ist, _bedingt_ soll auch ein Punkt entfernt werden und zwar nur dann, wenn er sich am Ende des Textes befindet. Al
Am Sonntag, 13. Februar 2005 00:55 schrieb Al Bogner:
Eine Variable setzt sich aus vorhergenden anderen Variablen zusammen. In dieser Variable sollen bestimmte Zeichen, zb [ :;] mit sed ersetzt werden, das auch vom Verständnis klar ist, _bedingt_ soll auch ein Punkt entfernt werden und zwar nur dann, wenn er sich am Ende des Textes befindet.
Der Punkt ist ja ein Platzhalter für ein Zeichen bei Regular-Expressions, der muss also maskiert werden, das Zeilenende findest Du mit $, also ein "\.$" sollte Punkte am Zeilenende repräsentieren. -- Machs gut | http://www.iivs.de/schwinde/buerger/tremmel/ | http://packman.links2linux.de/ Manfred | http://www.knightsoft-net.de
Am Sonntag, 13. Februar 2005 00:55 schrieb Al Bogner:
Eine Variable setzt sich aus vorhergenden anderen Variablen zusammen. In dieser Variable sollen bestimmte Zeichen, zb [ :;] mit sed ersetzt werden, das auch vom Verständnis klar ist, _bedingt_ soll auch ein Punkt entfernt werden und zwar nur dann, wenn er sich am Ende des Textes befindet.
s/\.$/x/ --> Ersetzt einen Punkt am Ende der Zeile durch ein "x" Willst du ihn am Ende eines mehrzeiligen Textes entfernen, musst du IMHO vorher den Text in eine einzige Zeile konvertieren (geeignete Trennzeichen für die Rückumwandlung wählen). -- Gruß MaxX Hinweis 1: PMs an diese Adresse werden automatisch vernichtet. Hinweis 2: Bitte unbedingt beachten: http://www.suse-etikette.de.vu
Hallo, Am Sun, 13 Feb 2005, Al Bogner schrieb:
Eine Variable setzt sich aus vorhergenden anderen Variablen zusammen. In dieser Variable sollen bestimmte Zeichen, zb [ :;] mit sed ersetzt werden, das auch vom Verständnis klar ist, _bedingt_ soll auch ein Punkt entfernt werden und zwar nur dann, wenn er sich am Ende des Textes befindet.
Bitte Beispiel! Naja, *microfasertuch-raushol-und-glaskugel-polier* Meinst du evtl. sowas?: dies@ist: ~/ein/shellprompt $ ( var1="foo"; var2=" bar "; var3="baz" varX="$var1:$var2;$var3" varY="$var1:$var2;$var3." echo "$varX" | sed 's/[ :;]//g;s/\.$//' echo "$varY" | sed 's/[ :;]//g;s/\.$//' # Oder eher so? echo "$varX" | sed 's/[ :;]\|\.$//g' echo "$varY" | sed 's/[ :;]\|\.$//g' # Oder willst du den Punkt nur in der letzten Zeile und wenn er dort # auch am Ende steht ersetzen, wenn das was sed sieht mehrzeilig ist? var="$var1. $var1:$var2. $var2;$var3." echo "$var" | sed 's/[ :;]//g;$s/\.$//' ) foobarbaz foobarbaz foobarbaz foobarbaz foo. foobar. barbaz dies@ist: ~/ein/shellprompt $ Ist jew., wenn man's von '(' bis ')' kopiert, c&p faehig, der Rest ist die Ausgabe. ;) Beachte die unterschiedlichen Rollen von '$' im letzten 'sed'-Befehl. *glaskugel-wieder-wegpack* Oder was??? -dnh -- (Multiple bracketed paragraphs usually indicate a severe lack of focus.) -- Juliusz Chroboczek
Am Sonntag, 13. Februar 2005 01:52 schrieb David Haller:
Hallo,
Am Sun, 13 Feb 2005, Al Bogner schrieb:
Eine Variable setzt sich aus vorhergenden anderen Variablen zusammen. In dieser Variable sollen bestimmte Zeichen, zb [ :;] mit sed ersetzt werden, das auch vom Verständnis klar ist, _bedingt_ soll auch ein Punkt entfernt werden und zwar nur dann, wenn er sich am Ende des Textes befindet.
[...]
# Oder willst du den Punkt nur in der letzten Zeile und wenn er dort # auch am Ende steht ersetzen, wenn das was sed sieht mehrzeilig ist?
var="$var1. $var1:$var2. $var2;$var3." echo "$var" | sed 's/[ :;]//g;$s/\.$//'
Oh, wieder was dazugelernt. 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 könnte die Zeilen ja vorher mit wc zählen. (Warum einfach, wenn ... ;-) *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 :-( -- Gruß MaxX Hinweis 1: PMs an diese Adresse werden automatisch vernichtet. Hinweis 2: Bitte unbedingt beachten: http://www.suse-etikette.de.vu
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.
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 könnte die Zeilen ja vorher mit wc zählen. (Warum einfach, wenn ... ;-)
*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 :-(
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. Was ist die "very first line"? 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? -- Gruß MaxX Hinweis 1: PMs an diese Adresse werden automatisch vernichtet. Hinweis 2: Bitte unbedingt beachten: http://www.suse-etikette.de.vu
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
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
Am Sonntag, 13. Februar 2005 01:52 schrieb David Haller:
Naja, *microfasertuch-raushol-und-glaskugel-polier* Meinst du evtl. sowas?:
Sorry David, was ich genau will bzw. brauche, weiß ich noch gar nicht. Nachdem nun der letzte Rechner auf 9.2 umgestellt wurde, hat mein Script, dass extensiv ImageMagick, exif, etc. nutzt nicht mehr richtig funktioniert. Geändert hat sich bei IM6 gegenüber IM5, dass ein Punkt am Ende einer Exif-Abfrage mit IM ist, mit exif aber nicht, und dass je nach Programm Exif-Informationen auf Deutsch oder Englisch bezeichnet sind (hätte ich doch die nicht "sprechenden" Tags verwendet). Nun muss ich das überarbeiten. Die Hinweise waren fürs erste schon mal ausreichend. Al
Hallo, Am Sun, 13 Feb 2005, Al Bogner schrieb:
Am Sonntag, 13. Februar 2005 01:52 schrieb David Haller:
Naja, *microfasertuch-raushol-und-glaskugel-polier* Meinst du evtl. sowas?:
Sorry David, was ich genau will bzw. brauche, weiß ich noch gar nicht. Nachdem nun der letzte Rechner auf 9.2 umgestellt wurde, hat mein Script, dass extensiv ImageMagick, exif, etc. nutzt nicht mehr richtig funktioniert. Geändert hat sich bei IM6 gegenüber IM5, dass ein Punkt am Ende einer Exif-Abfrage mit IM ist, mit exif aber nicht,
Da sollte das $s/\.$// dann ja helfen ;) Oder ist der Punkt in jeder Zeile? Dann lass einfach die Adresse weg.
und dass je nach Programm Exif-Informationen auf Deutsch oder Englisch bezeichnet sind (hätte ich doch die nicht "sprechenden" Tags verwendet). Nun muss ich das überarbeiten. Die Hinweise waren fürs erste schon mal ausreichend.
Schreib 'export LANG=C' oben in dein script damit es sprachunabhaengig wird ;) -dnh --
Hat jemand eine derartige Konstellation und kann mir kurz den Kopp auf die Tischplatte haun ? ;-) *autsch* Tut das nicht weh? -- Oli Weiss und Christian Boltz in suse-linux
Hallo, Am Sun, 13 Feb 2005, Al Bogner schrieb:
Am Sonntag, 13. Februar 2005 16:27 schrieb David Haller:
Da sollte das $s/\.$// dann ja helfen ;)
Ganz so einfach ist es leider nicht. Das Script hat >2000 Zeilen und da muss ich nun durch.
Ich weiss ;) Kannst mir ja mal per PM die aktuelle Version mailen ;)
Deine Beispiele halfen aber sehr weiter.
*g* -dnh -- Es gibt schließlich auch weitgehend DAU-sichere Programme, das Problem ist allerdings, daß bereits die Programmierer von OE die größten DAUs sind. Da helfen keine Pillen. :-( -- Doch, eine häts gegeben, nur hätte man /Frau die etwa 9 Monate vor der Geburt der Programmierer einnehmen müssen... [in dag°]
Hallo Al, hallo Leute, Am Sonntag, 13. Februar 2005 11:38 schrieb Al Bogner:
[...] und dass je nach Programm Exif-Informationen auf Deutsch oder Englisch bezeichnet sind (hätte ich doch die nicht "sprechenden" Tags verwendet).
Hint: LANG=C exif .... Gruß Christian Boltz -- Achso, "danke" fuer die Beleidigung. Darf ich dich so zitieren? Das waere praktisch als Ausrede, wenn ich mal jemanden flamen will. "Ist der Ruf erst ruiniert, flamed es sich ganz ungeniert" [David Haller in suse-linux]
participants (5)
-
Al Bogner
-
Christian Boltz
-
David Haller
-
Manfred Tremmel
-
Matthias Houdek