sed nicht gierig
Nadine N.
- programmiertechnik
Hi!
ich möchte in jeder Zeile die letzten 2 Bindestriche + was da zwischen steht entfernen
Beispiel: Test-Test-Test-3.4_SVNr142-7.10 übrig bleiben soll nur noch Test-Test-Test
aktuell bleibt bei mir nur noch "Test" übrig
ich habe folgenden sed Ausdruck
sed -e 's/-.*-.*$//g' Eingabedatei >Ausgabedatei;
per google habe ich gefunden, dass das an den gierigen Ausdruck * liegt, wenn man *? verwendet, soll der Ausdruck nicht mehr gierig sein.
wenn ich
sed -e 's/-.*?-.*?$//g' Eingabedatei >Ausgabedatei;
verwende, erhalte ich "Test-Test-Test-3.4_SVNr142-7.10" zurück.
An welcher Stelle mache ich den Fehler?
Danke!
Nadine
ich möchte in jeder Zeile die letzten 2 Bindestriche + was da zwischen steht entfernen
Beispiel: Test-Test-Test-3.4_SVNr142-7.10 übrig bleiben soll nur noch Test-Test-Test
aktuell bleibt bei mir nur noch "Test" übrigich habe folgenden sed Ausdruck
sed -e 's/-.*-.*$//g' Eingabedatei >Ausgabedatei;per google habe ich gefunden, dass das an den gierigen Ausdruck * liegt, wenn man *? verwendet, soll der Ausdruck nicht mehr gierig sein.
wenn ich
sed -e 's/-.*?-.*?$//g' Eingabedatei >Ausgabedatei;
verwende, erhalte ich "Test-Test-Test-3.4_SVNr142-7.10" zurück.An welcher Stelle mache ich den Fehler?
Ich kenne sed nicht und weiss demnach nicht welche POSIX oder Perl Features hier unterstützt werden.
Du solltest im Zweifelsfall das Ende des Strings etwas gewählter bezeichnen.
Eventuell wird eine negative Zeichenklasse [^-] liess Nicht '-' unterstützt.
s/-[^-]*-[^-]*$//g
mfg Beat
Hi!
s/-[^-]*-[^-]*$//g
danke, das funktioniert
ich hatte noch "s/-[^-]*-[^-]*$//g" probiert. Ich dachte, dass der Bindestrich escaped werden muss, da er in den eckigen Klammern als Bereich verwendet wird.
Nadine