RegExp - Hilfe. Ab einem Ausdruck abschneiden.

  • hi.



    ich moechte aus so einem string

    Code
    DEH.R11KBK.AP.X0200K.D071008.T190909.D071008.T190909.D071008.T190909.D071008.T190909


    so einen machen

    Code
    DEH.R11KBK.AP.X0200K.D071008.T190909



    es kann auch sein das der so aus sieht

    Code
    DEH.R11KBK.AP.X0200K.D071008.T190909.2


    um es mit worten auszu druecken


    er soll alles abschneiden was nach dem

    Code
    .D071008.T190909


    steht.


    wobei die zahlen varieren .. ist halt nen timestamp :)

    Code
    .D[0-9]{6}.T[0-9]{6}




    vorher zaehle ich die anzahl der timestamps in dem string so

    Code
    awk --re-interval -F'\\.D[0-9]{6}\\.T[0-9]{6}' '{ print NF - 1 }'


    also eine aehnlich methode um abzuschneiden waere schoen.


    hier noch mal danke an die die mir im ersten thread schon geholfen haben
    http://vdr-portal.de/board/thread.php?threadid=69829


    gruesse mentox

    Einmal editiert, zuletzt von mentox ()

  • hi nochmal



    was sagt ihr hier zu????



    Code
    echo EEH.FTPKA5.AW.ASBNEU.D071019.T135129.D071019.T135129.1 | gsed 's/\(\.D[0-9]\{6\}\.T[0-9]\{6\}\).*/\1/g'



    das bloede ist das ich etwas unter zeit druck stehe und im google leider nichts finde .. mist :)

  • wie jetzt bloedsinn? :)

  • Mein Vorschlag hätte halt alle timestamps der reihenach ausgegeben (oder alternativ in ein Array geschrieben ) aber das ist ja nicht das was du wolltest.


    Sag mahl in wie weit ist der Sring denn immer der selbe. Ist es fileicht auch möglich einfach nur die ersten 6 Punktgetrenten Blöcke auszugeben? Oder alternativ die ersten 33 Zeichen? Was ungemein simpler wäre.


    Aber eleganter gets warscheinlich mit den awk funktionen match(string, regexp) und substr(string,start_pos,end_post). Aber awk habe ich noch nie benutzt diese seite könnte aber helfen http://people.cs.uu.nl/piet/docs/nawk/nawk_92.html

  • Hallo,


    Es müsste ungefähr so aussehen:


    cat datei.txt | sed 's/^\([^\.]{0,}\.[^\.]{0,}\.[^\.]{0,}\.[^\.]{0,}\.D[0-9]{6}\.T[0-9]{6}\)$/\2/g' >neuedatei.txt


    kann sein, dass die runden Klammern nicht maskiert werden müssen.


    Hannes


    robbitobbi://Scenic xB @ 866MHz/~Nexus2.1 - Budget TT 1.0 (Empfangs-VDR)
    fliewatueuet://ScenicxB @ 800MHz/~i810fb-xinelibout (Client)

  • hi


    leider ist die laenge und die anzahl der vor dem timestamp nicht identisch :( variriert von datei zu datei :(



    lg dominique

  • Zitat

    Original von mentoxleider ist die laenge und die anzahl der vor dem timestamp nicht identisch :( variriert von datei zu datei :(


    Oh, war auch ein Fehler drin: Du willst ja den ersten Ausdruck haben und es müssen noch weitere folgen können. Also so:



    cat datei.txt | sed 's/^\([^\.]{0,}\.[^\.]{0,}\.[^\.]{0,}\.[^\.]{0,}\.D[0-9]{6}\.T[0-9]{6}\)*.$/\
    2/g' >neuedatei.txt



    Im Klartext heißt das ja:


    s/ Suchmuster
    ^ Zeilenanfang
    \( erster Ausdruck
    [^\.]{0,} kein Punkt, null Mal oder oefter
    \. dann ein Punkt
    [^\.]{0,}\. kein Punkt, null mal oder oefter, dann wieder ein Punkt
    [^\.]{0,}\.[^\.]{0,}\. noch zweimal der Spass
    D[0-9]{6}\.T[0-9]{6} der Zeitstempel
    \) Ende des ersten Ausdrucks
    *. Beliebig viele andere Zeichen
    $ Zeilenende
    /\1 ersten Ausdruck ersetzen
    /g'



    Das sollte doch klappen?!?


    Hannes


    robbitobbi://Scenic xB @ 866MHz/~Nexus2.1 - Budget TT 1.0 (Empfangs-VDR)
    fliewatueuet://ScenicxB @ 800MHz/~i810fb-xinelibout (Client)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!