Nadine N.: sed nicht gierig

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

  1. 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?

    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

    --
    Woran ich arbeite:
    X-Torah
    ><o(((°>        ><o(((°>
       <°)))o><                      ><o(((°>o
    1. 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