Zeichenersetzung mit bash / sed

  • Hallo,


    weil hier so viele Experten unterwegs sind versuche ich es mal mit folgendem Problem:


    Es gibt in meinem Musikarchiv am Anfang eines Namens des Verzeichnis bzw. der Datei einige Bearbeitungszeichen (#-~_) diese können auch gemeinsam in verschiedener Reihenfolge auftauchen.


    Um diese Kennzeichen nicht bei der Auswahl zu haben, möchte ich Links in einem anderen Verzeichnis erstellen.


    1. Wie bekomme ich mit der bash dieses gelöst?


    2. Ist der Aufruf von sed sehr Zeitaufwendig?
    2b. was ist an dieser Zeile falsch

    Code
    Nameneu="$(echo "$Name" | sed s°^[#-~_]*°°g)"

    es entfernt immer nur ein Zeichen


    Hardy

    Suche: 6 Richtige für die nächste Lottoziehung
    PS: Wer Rechtschreibfehler findet, darf sie behalten!

  • Zitat

    2b. was ist an dieser Zeile falsch


    ich glaube der Bindestrich wird in deinem Ausdruck als Bereichsangabe interpretiert (suche Zeichen # bis ~, sowie _.
    Stell den mal nach hinten: [#~_-]


    Test:
    echo "---_-~#123" | sed "s/^[#~_-]*//"
    liefert 123

    VDR: Asus Pundit; P4 2.4 GHz; 160GB Samsung, 5400er; NEC 2510A; TT1.6 für Ausgabe; 2x Nova-T USB stick; c't vdr 6; URC8060; AVBoard 1.3

  • Morgen


    Die Shell ist halt flinker, wenn hier im Beispiel auch nicht gerade kurz :rolleyes:



    Denke man bekommt Substitution auch in eine Zeile (shell) nur wie, (einen Parameter, wie bei sed (global) scheint es nicht zu geben, deshalb mehrere Durchläufe).


    MFG Ronny

  • Probier mal

    Code
    ...]+*

    LG
    Jochen


    Rpi4 headless mit MLD 5.4 als Server via satip-Plugin hinter einem Telestar Digibit Twin, ein Rpi3 als Streamdev-Client mit MLD 5.4

    Rpi3 auch hinter Telestar Digibit Twin und mit MLD 5.4

  • Zitat

    Original von ronnykornexl
    Denke man bekommt Substitution auch in eine Zeile (shell) nur wie, (einen Parameter, wie bei sed (global) scheint es nicht zu geben, deshalb mehrere Durchläufe).


    Mit aktiviertem "Extended Pattern Matching" klappts in einer Zeile:


    Code
    greywolf@matrix:/tmp$ shopt -s extglob
    greywolf@matrix:/tmp$ NAME="---_-~#123"
    greywolf@matrix:/tmp$ echo "${NAME##*([#~_-])}"
    123
  • Zitat

    Original von Greywolf


    Mit aktiviertem "Extended Pattern Matching" klappts in einer Zeile:


    Code
    greywolf@matrix:/tmp$ shopt -s extglob
    greywolf@matrix:/tmp$ NAME="---_-~#123"
    greywolf@matrix:/tmp$ echo "${NAME##*([#~_-])}"
    123


    Fetzt ja, sowas habe ich nicht zum ersten mal gesucht ;D


    MFG Ronny

  • Hallo,


    vielen Dank für die Hilfe.


    Zitat

    Original von ronnykornexl
    Morgen


    Die Shell ist halt flinker, wenn hier im Beispiel auch nicht gerade kurz :rolleyes:


    Die länge des Scripts ist mir egal, nur die Laufzeit ist schon entscheidend. Da es auch um ca. 30000 Dateien geht ist schon jede Sekunde wichtig.



    Zitat

    Original von Greywolf
    Mit aktiviertem "Extended Pattern Matching" klappts in einer Zeile:


    Code
    greywolf@matrix:/tmp$ shopt -s extglob
    greywolf@matrix:/tmp$ NAME="---_-~#123"
    greywolf@matrix:/tmp$ echo "${NAME##*([#~_-])}"
    123


    Das sieht schon sehr gut aus.


    Hardy

    Suche: 6 Richtige für die nächste Lottoziehung
    PS: Wer Rechtschreibfehler findet, darf sie behalten!

    Einmal editiert, zuletzt von HFlor ()

Jetzt mitmachen!

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