Anzeige:
Ergebnis 1 bis 4 von 4

Thema: bash - regex

  1. #1
    Registrierter Benutzer
    Registriert seit
    30.01.2008
    Beiträge
    7

    bash - regex

    Hallo zusammen,

    ich bin bisher ziemlich gut um regular expressions rumgekommen. Manchmal habe ich mein Vorhaben einfach in php umgesetzt ;-). Aber jetzt möchte ich gerne in der Shell bleiben.

    Code:
    echo "/home/blabla/key_blabla.pub"
    Ich möchte in einem Bash-Script, den Namen inklusive Datei-Erweiterung haben. In Bash weiß ich keinen Weg, wie ich da um regex rumkomme. Das ist auch in sofern nicht schlimm, da es nicht schaden kann es zu lernen. Ich bin aber mit meinen Versuchen kläglich gescheitert..

    Die Frage die ich mir stelle ist auch, nehme ich dafür grep oder sed.

    Also ich möchte key_blabla.pub zurück bekommen:

    Code:
    echo "/home/blabla/key_blabla.pub" | grep '$*/'
    Das ist einer meiner Versuche, ich habe auch probiert mit Parametern gearbeitet, ohne erfolg.

    Die andere wichtige Frage die ebenfalls aufgekommen ist:
    Sind regex überall gleich. Ich weiß das es gewisse unterschiede von Sprache zu Sprache gibt, aber z.B. ein "$" sollte doch überall das gleich bedeuten oder?

    Ich hoffe es kann mir jemand bei meinem Problem helfen.

    Gruß Björn

  2. #2
    Registrierter Benutzer Avatar von Aqualung
    Registriert seit
    28.01.2008
    Beiträge
    14
    echo "/home/blabla/key_blabla.pub" | sed "s/^.*\///"

    Erläuterung:
    s/ = Substitute(ersetze):
    ------------------------------
    ^=Anfang der Zeile
    .=ein beliebiges Zeichen
    .*=beliebig viele beliebige Zeichen
    bis \/ , gequoteter slash
    -------------------------------
    / durch
    / nix.

    HTH Aqualung

  3. #3
    Registrierter Benutzer
    Registriert seit
    30.01.2008
    Beiträge
    7
    Hi,

    cool Danke! Ich wusste das es relative einfach ist, aber ich habe es einfach nicht gebacken bekommen. Es ist ja schon daran gescheitert das ich dachte das "*" beliebig viele beliebige Zeichen bedeutet. Okay das hat mich ein ganzes Stück in Sachen logik von Regex weitergebracht.

    Gruß Björn

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    noch was zu den Unterschieden: Es gibt einfache und erweiterte reguläre Ausdrücke, sed und grep arbeiten standardmäßig mit einfachen. Für erweiterte stehen ind sed der Schalter -r und in grep der Schalter -E zur Verfügung. Damit hast Du dann z. B. + (vorheriges Zeichen oder Gruppe mindestens 1x) zusätzlich zur Verfügung. Perl nutzt immer Extended RegEx.

    @Aqualung: Der Zeilenanfang ^ ist in diesem Fall überflüssig, weil regex per Default "greedy" (gierig) sind - eine regex wie .* greift sich also immer den größtmöglichen Bereich aus dem String ab.

    Jan

    P.S.: Du hättest Dich noch weiter vor regex drücken können ;-)
    Code:
    jan@jack:~/tmp> basename "/home/blabla/key_blabla.pub"
    key_blabla.pub

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •