[sed] Zahl mit führenden Nullen auffüllen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von spacebull, 21.07.2006.

  1. #1 spacebull, 21.07.2006
    spacebull

    spacebull Grünschnabel

    Dabei seit:
    21.07.2006
    Beiträge:
    2
    Zustimmungen:
    0
    Hallo Boar,

    ich habe folgendes Problem:
    Im Verzeichnis /var/svn befinden sich Verzeichnisse nach dem Schema "svn-000, svn-001" usw.
    Ich schreiibe gerade ein Script, welches das nächste freie Verzeichniss erstellt. Also in diesem Fall svn-002. Soweit bin ich bisher:
    Code:
    # ls /var/svn/ | grep svn- | tail -1 | sed s/svn-//g | sed s/0*//g 
    6
    
    Nun muss ich aber die führenden Nullen da wieder hin zauber. Und da verlässt mich meine sed-Weisheit :-( Wisst ihr eventuell Rat? Also 2 soll zu 002 und 42 zu 042 werden.

    Viele Grüße,
    Matze
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    printf sollte Dir helfen:

    Code:
    [~]$ nvar=$(printf "%03d" 5)
    [~]$ echo $nvar
    005
    
    Gruss, Xanti
     
  4. #3 spacebull, 21.07.2006
    spacebull

    spacebull Grünschnabel

    Dabei seit:
    21.07.2006
    Beiträge:
    2
    Zustimmungen:
    0
    Jo Super! Vielen Dank!
     
  5. #4 chris2007, 08.09.2007
    Zuletzt bearbeitet: 08.09.2007
    chris2007

    chris2007 Grünschnabel

    Dabei seit:
    07.09.2007
    Beiträge:
    3
    Zustimmungen:
    0
    sed

    Ich habe hunderte Dateien in denen ich für die durchnummerierten Geräte mit einer Nummer unter zwei Stellen eine führende Null anhängen will.

    Beispieldatei sieht etwa so aus:
    DEVICE "XO_D1_luzi"
    {
    -sync
    -retry
    }

    DEVICE "LOC_D2_zenzi"
    {
    -sync
    -retry
    }
    und so weiter...
    DEVICE "OO_D10_seppi"
    {
    -sync
    -retry
    }
    und so weiter...


    Im Beispiel würde ich also gerne in der Zeile in der das DEVICE genannt wird folgende Änderung haben:

    DEVICE "XO_D01_luzi"
    [...]
    DEVICE "LOC_D02_zenzi"
    [...]
    DEVICE "OO_D10_seppi"

    Habe es mit folgender Syntax versucht

    Code:
    for file in $(ls -1)
    do
    sed -e '/DEVICE/s/_D/&0/g' $file >$file.new
    done
    
    Das hängt mir die 0 aber vorne auch bei zweistelligen Zahlen an.

    DEVICE "XO_D01_luzi"
    [...]
    DEVICE "LOC_D02_zenzi"
    [...]
    DEVICE "OO_D010_seppi"

    Ich möchte nur Einstellige ergänzen. :?
     
  6. #5 angelsfall, 08.09.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    Hi,

    es gibt sicher eine schönere Lösung, aber vielleicht reicht dir das ja:
    Code:
    sed -e '/DEVICE/s/\(_D\)\([[:digit:]]_\)/\10\2/g' $file >$file.new
    
    (Und es is spät! :) )
     
  7. #6 chris2007, 08.09.2007
    Zuletzt bearbeitet: 08.09.2007
    chris2007

    chris2007 Grünschnabel

    Dabei seit:
    07.09.2007
    Beiträge:
    3
    Zustimmungen:
    0
    sed

    Code:
    sed: Function /DEVICE/s/\(D_)\([[:digit:]]_\)/\10\2/g cannot be parsed.
    
    Der hier geht ohne Probleme durch, aber überschreibt den hinteren Underscore _

    DEVICE "XO_D01luzi"
    [...]
    DEVICE "LOC_D02zenzi"
    [...]
    DEVICE "OO_D010_seppi"


    Code:
    /DEVICE/s/\(_D\)\([[:digit:]]\)\(_\)/\10\2/g'
     
  8. #7 smg, 08.09.2007
    Zuletzt bearbeitet: 08.09.2007
    smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    @spaceball:

    Code:
    stephan@unimatrix ~/var/svn :( $ /bin/ls
    svn-000  svn-001  svn-002  svn-003  svn-004  svn-005
    Code:
    /bin/ls | sed -n '${s/^svn-//p}'
    Code:
    stephan@unimatrix ~/var/svn :) $ /bin/ls | sed -n '${s/^svn-//p}'
    005
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 angelsfall, 08.09.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    Ja, da fehlt auch ein \ hinter dem D_. Hatte ich so aber auch nicht geschrieben :)

    Ist ja auch klar. \1 und \2 zeigen auf die Matchings aus den ersten beiden Klammern. Wenn dann musst du schon alle drei Referenzen angeben, da du ja 3 Klammern hast. (Oder du machst es wie oben beschrieben ;) )
     
  11. #9 chris2007, 08.09.2007
    chris2007

    chris2007 Grünschnabel

    Dabei seit:
    07.09.2007
    Beiträge:
    3
    Zustimmungen:
    0
    sed

    :oldman
    Jetzt geht mir im hohen Alter endlich doch noch ein Licht auf!

    Danke :):D:)
     
Thema:

[sed] Zahl mit führenden Nullen auffüllen

Die Seite wird geladen...

[sed] Zahl mit führenden Nullen auffüllen - Ähnliche Themen

  1. Dateien selektieren und zählen

    Dateien selektieren und zählen: Hallo, das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als...
  2. »Humble Staff Picks« mit zahlreichen Linux-Spielen

    »Humble Staff Picks« mit zahlreichen Linux-Spielen: Das Humble-Bundle-Team hat ein weiteres »Humble Bundle« geschnürt. Unter dem Titel »Humble Staff Picks« finden sich zahlreiche Spiele, die auch...
  3. Linux Presentation Day 2016.1 in zahlreichen Städten

    Linux Presentation Day 2016.1 in zahlreichen Städten: Am 30. April wollen User Groups, Studenten, Unternehmen und Bildungseinrichtungen in mehr als 80 deutschen Städten den Linux Presentation Day...
  4. Nmap 7.10 mit zahlreichen neuen Skripten und Fingerabdrücken

    Nmap 7.10 mit zahlreichen neuen Skripten und Fingerabdrücken: Der Nmap-Entwickler Gordon »Fyodor« Lyon hat bekannt gegeben, dass eine neue Version des populären, freien Netzwerkscanners veröffentlicht wurde....
  5. Nmap 7.10 mit zahlreichen neuen Skripten und Fingerabdrücken

    Nmap 7.10 mit zahlreichen neuen Skripten und Fingerabdrücken: Der Nmap-Entwickler Gordon »Fyodor« Lyon hat bekannt gegeben, dass eine neue Version des populären, freien Netzwerkscanners veröffentlicht wurde....