Suche sed/awk Ausdruck, bin leider zu doof

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von stormtide, 26.09.2007.

  1. #1 stormtide, 26.09.2007
    stormtide

    stormtide Grünschnabel

    Dabei seit:
    16.06.2005
    Beiträge:
    6
    Zustimmungen:
    0
    Ort:
    Neuendorf (CH)
    Hallo zusammen

    Ich suche einen sed/awk Ausdruck, der mir der Speicherort einer Datei liefert.
    Wenn ich also z.B. den String /home/ich/dateien/bilder/bild.jpg habe, möchte ich den Rückgabewert "bilder".
    Der Ausdruck soll nicht abhängig von der Pfadtiefe sein, jedoch immer den "tiefsten" Ordner abfragen.
    Kann mir jemand so einen Ausdruck machen?
    Ich bin wohl zu blöde dafür... ?(

    Vielen lieben Dank
    Andy
     
  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. #2 Schlaubi_fi.de, 26.09.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Wirklich sehr Quick'n'Dirty... :D
    Code:
    pfad=""; pfad=/home/ich/dateien/bilder/bild.jpg; gl=${#pfad}; sos=${pfad//\//}; los=${#sos}; sn=$(($gl - $los)); echo $pfad | awk -v so=$sn -F"/" '{ print $so }'
    bilder
     
  4. #3 stormtide, 26.09.2007
    stormtide

    stormtide Grünschnabel

    Dabei seit:
    16.06.2005
    Beiträge:
    6
    Zustimmungen:
    0
    Ort:
    Neuendorf (CH)
    mac:~ Andy$ echo "/Users/Andy/Test/Image.jpg" | sed -e 's/.*\/(.*)\/.*\.jpg.*/'
    sed: 1: "s/.*\/(.*)\/.*\.jpg.*/
    ": unescaped newline inside substitute pattern

    habs gerade mit dem obenstehenden versucht und ensprechende fehlermeldung erhalten - weiss jemand warum?
     
  5. #4 angelsfall, 27.09.2007
    Zuletzt bearbeitet: 27.09.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    Tut es nicht vielleicht auch ein basename? Ist etwas einfacher:

    Code:
    roadtrip)0)502)~} basename /ichexistierenicht/ichauchnicht.jpg .jpg
    ichauchnicht
    
    {edit}
    Verlesen. Ich lasse es trotzdem mal stehen, sonst sieht das Posting so leer aus ;)

    {edit II}
    Ich hab mal was mit Perl probiert. Vielleicht funktionierts ja für dich:

    Code:
    roadtrip)0)548)~} cat tt
    /ichexistierenicht/asdf/ichauchnicht.jpg
    roadtrip)0)549)~} perl -nle 'my $rev = reverse; if ($rev =~ s#gpj.[^/]+/([^/]+)/.*#$1#) { $rev = reverse $rev; print $rev;}' < tt
    fdsa
    
    {edit III}
    Du musst Klammern auch escapen.
     
  6. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Geht ganz einfach mit der Kombination von 'dirname' und 'basename':
    Code:
    basename $(dirname /home/ich/dateien/bilder/bild.jpg)
    bilder
    
    Grüsse
    d22
     
  7. #6 stormtide, 27.09.2007
    stormtide

    stormtide Grünschnabel

    Dabei seit:
    16.06.2005
    Beiträge:
    6
    Zustimmungen:
    0
    Ort:
    Neuendorf (CH)
    Wollte schon einen Ausdruck, den ich auch versteh' :)

    Vielen Dank für die Mühe.
    Ich habe inzwischen die "schöne" Lösung gefunden:

    Code:
    dirname /home/andy/test/celica/hallo.jpg | xargs basename
    Edit: oh, da war ich wohl etwas zu übereifrig ^^
    Vielen Dank!!!
     
  8. #7 angelsfall, 27.09.2007
    Zuletzt bearbeitet: 27.09.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    Haha, super, ich kannte dirname noch gar nicht. Danke! :)

    {edit}
    Auch wenn ich anfange, Selbstgespräche zu führen: Es hat mir keine Ruhe gelassen, dass die Perl-Zeile so kompliziert aussah. So geht es einfacher :)

    Code:
    perl -ne '$_ = reverse; print scalar reverse if s#gpj.[^/]+/([^/]+)/.*#$1#' < tt
    oder
    perl -ne 'print scalar reverse if ($_ = reverse) && (s#gpj.[^/]+/([^/]+)/.*#$1#)' < tt
    
     
  9. #8 smg, 27.09.2007
    Zuletzt bearbeitet: 27.09.2007
    smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    < brauchst du nicht. und die ( ) um den substitutions befehl auch nicht.
    Code:
    perl -ne 'print [split /\//]->[-1] ' <<< /home/ich/dateien/bilder/bild.jpg
    
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Hmm mit 'sed':
    Code:
    echo /home/test/texte/privat/text.jpg | sed 's:.*/\(.*\)/.*$:\1:'
    privat
    
    Ginge es auch eleganter?
    Gruss
    d22
     
  12. #10 angelsfall, 27.09.2007
    angelsfall

    angelsfall Routinier

    Dabei seit:
    09.05.2005
    Beiträge:
    315
    Zustimmungen:
    0
    Ort:
    Berlin
    Tolle Lösungen. Immer interessant zu sehen, wie viele Wege es gibt.

    @smg: Da müsste -2 anstelle von -1 stehen, da er ja den Ordner und nicht das Bild haben möchte. Funktioniert zumindest bei mir nur so. Wusste gar nicht, dass es negative Array-Elemente gibt?

    @dizzgo: Ich habe immer Respekt vor dem dot-star. Daher dachte ich, es sei einfacher, den String umzudrehen, weil mM nach die regex dann eindeutiger wird. Vielleicht auch zu kompliziert von mir gedacht ...
     
Thema:

Suche sed/awk Ausdruck, bin leider zu doof

Die Seite wird geladen...

Suche sed/awk Ausdruck, bin leider zu doof - Ähnliche Themen

  1. Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...

    Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...: Ich habe eine Textdatei in der ich Einträge bis zum 3. Leerzeichen mit den restlichen Zeilen (auch nur bis 3. Leerzeichen) vergleichen muss und...
  2. Shell-Skript Datum in einer Datai suchen

    Shell-Skript Datum in einer Datai suchen: Hallo zusammen Ich komm eigentlich aus der Klicki-Bunti-Welt von Windows. Seit geraumer Zeit versuche ich meine Künste mit verschiedenen...
  3. [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

    [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter: Hallo zusammen, ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen. Anbei ein Ausschnitt aus...
  4. Funktionssuche in C: Emacs oder Vim?

    Funktionssuche in C: Emacs oder Vim?: Hallo, ich muss mir häufig C-Projekte angucken, und dann suche ich bspw., wo eine aufgerufene Funkion definiert oder deklariert (Header) wird....
  5. Artikel: Suche und Analyse in Echtzeit mit Elasticsearch und dem Elastic Stack

    Artikel: Suche und Analyse in Echtzeit mit Elasticsearch und dem Elastic Stack: Mit dem Elastic Stack kann man in Echtzeit die wichtigen Informationen aus jedem Datensatz herauslesen, ungeachtet seiner Größe. Dieser Artikel...