Führende Nullen mit sed entfernen

  • Hallo,


    ich muss aus einer Versionsnummer führende Nullen mit sed heraus operieren.
    Prinzipiell ist das recht einfach.


    Mein Sting ist z.B. folgender:
    17.01.01


    Ziel ist:
    17.1.1


    sed "s/.00*/./g"
    tut dies ja.


    Das Problem ist nun, das eine Null stehen bleiben soll, wenn nur Nullen vorhanden sind.
    Obiges sed würde ja aus "17.00.01" dann "17..1" machen. Es soll dann aber "17.0.1" sein.


    Wie kann ich das regeln?


    Besten Dank schonmal für Vorschläge.

  • Code
    sed -e 's/0*\([0-9]\)/\1/g'


    Das nimmt alle fuehrenden Nullen weg, laesst aber die letzte Zahl einer Reihe immer stehen?



    uwe

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

  • Code
    sed -e 's/0*\([0-9]\)/\1/g'


    Das geht bei mehreren Nullen in der Versionsnummer schief:

    Code
    $ echo "17.0100.01" | sed -e 's/0*\([0-9]\)/\1/g'                                                                       
    17.10.1


    Wie wäre es alle mindestens einmal vorkommende Nullen zu löschen, die vor einem anderen Zeichen als einem Punkt, einer Null oder einem Zeilenende stehen?

    Code
    $ echo "17.00100.01" | sed 's/0\+\([^0.$]\)/\1/g;s/\.0\+$/.0/'                                                                       
    17.100.1
    $ echo "17.01.01" | sed 's/0\+\([^0.$]\)/\1/g;s/\.0\+$/.0/'                                                                          
    17.1.1


    Edit: und mit einer zusätzlichen Ersetzung klappt es auch, wenn die Versionsnummer hinter dem letzten Punkt 0 ist.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    Einmal editiert, zuletzt von seahawk1986 ()

  • Wow vielen Dank. Das ging echt schnell :respekt


    Mit Euren Anregungen bin ich jetzt zu diesem hier gekommen:

    Code
    sed -r 's/0+([^0.$])/\1/g;s/\.0+/.0/g'


    Das sollte m.E. alle Möglichkeiten abdecken.


    @seahawk: Dein zweiter Regex griff immer nur am Zeilenende. Deswegen hab ich das Zeilenende raus genommen.

  • Schön zu sehen , das hier einige Unixer unterwegs sind ;)

    Software : VDR 2.3.8 | DDCI2 1.0.5 | LIVE 2.3.1 | STREAMDEV-SERVER 0.6.1 | VNSISERVER 1.5.2
    Server : ASRock J3710-ITX | 4GB RAM | 120GB SSD | Digital Devices Cine S2 V6.5 | DuoFlex CI | AlphaCrypt
    Client : Odroid C2 Kodi


Jetzt mitmachen!

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