Teil eines Dateinamens ausgeben

N

newsmaker

Grünschnabel
Folgendes Problem:
Ich möchte eine Zeichenkette aus meinem Dateinamen in einer Variable verwenden. Der Dateiname wird von einem Findcommando ausgegeben.

Dateiliste:
D0004XX0005F07L003B.pgs -> benötigt wird: F07L003B
E0004XXF07L063A.pgs -> benötigt wird: F07L063A
E0033CHF08P032X.pgs -> benötigt wird: F08P032X
E0033CH.pgs -> keinen Wert ausgeben!

Es sind immer die letzten 7 Zeichen vor der Dateierweiterung, beginnend mit F.... fehlt diese Kennung, soll auch keine ausgegeben werden.

Irgendwie hab' ich da eine Denkblockade oder stell es mir komplizierter vor als es ist.
 
Hallo
Frage:Welche Shell bzw. OS?

Übrigens sind es in deinem Beispiel 8 Zeichen!
Schnellschuß für Bash Ksh:
Code:
A=D0004XX0005F07L003B.pgs;
ZIEL="$(echo $A|sed -e 's/.*\(.\{8\}\)\..*/\1/')";

Gruß Wolfgang
 
Klar, 8 Zeichen du hast Recht.
Das ganze läuft unter Red Hat Linux in der bash-shell. Aber dein Schnellschuss klappt super, danke. Genau dass was mir gefehlt hatte. Da brauch ich noch a weng bis ich immmer die passenden RegEx find.
 
So geht's auch:
Code:
#!/bin/bash
find . -name "*F???????.pgs" |
while read file; do
    echo `expr $file : '.*\(........\).pgs'`
done

Ich kenne mich aber noch nicht so recht mit der Bash aus und glaube, daß mit dem `` und dem expr kann man irgendwie einfacher machen.
 
Der Vorgang ist bei mir folgender:

Ich such nach einer Datei die mit dem Dateinamen "D0004XX0005" anfängt. Find gibt mir den komplettemn Namen aus mit dem Zusatz. Die Ausgabe wird abgefangen und nur die letzten 8 Zeichen abgefangen, fehlt der F... Zusatz soll nix ausgegeben werden. Das funktioniert mit der ersten Antwort von Wolfgang wunderbar.
 
Hallo
Das ist aber eine neue Option, ging aus deinem ersten Post nicht hervor.
edit/ Sorry ging doch hervor, habe es echt überlesen.
Mein Konstrukt prüft NICHT auf ein Vorkommen von F.

Wenn das erste Zeichen der 8 verbleibenden Zeichen kein F ist soll es leer sein:
Code:
Ziel="$(echo $A|sed -e 's/.*\(.\{8\}\)\..*/\1/;/^F/!d')"

Gruß Wolfgang
 
Zuletzt bearbeitet:
So sollte es auch klappen:
Code:
Ziel="$(echo $A| [B]sed -n 's/.*\(F.\{7\}\)\..*/\1/p'[/B])"
Gruss
d22
 

Ähnliche Themen

Dateinamen und Inhalt aussuchen

Newbie sucht Hilfe: Zahl aus Datei mit grep/cut/sed lesen und schreiben?

awk/sed Zeilen bei der Uhrzeit 3 Minuten auseinanderliegt löschen

"Probleme" mit einem Kernelmodul

uniq - trotzdem doppelte einträge

Zurück
Oben