Hallo Roland, Am Mittwoch, 8. Februar 2006 22:25 schrieb Roland M. Kruggel: > ich muss einen filename mit der bash 'zerschneiden' > > das format ist > aa.name.txt > oder > b.ccc.name.txt > > als resultat brauche ich in drei variablen 'aa', 'name' und 'txt' > bzw. 'b.ccc', 'name' und 'txt'
d.h. Die Struktur ist sehr einfach, "WorteMitPunkten PUNKT NAME PUNKT SUFFIIX" durch diese letzte Struktur kannst Du das ja mit regulären Ausdrücken erschlagen. > > Mein erster versuch mit cut -d"." -f ... schlug leider fehl. Ich muss > z.b. die punkte zählen oder ...? die Punkte zählen wäre der andere Weg, aber ich würde über die Struktur gehen (Stichwort: Substring extraction). Insbesondere ist bei cut das Problem, dass Du afaik nicht "die letzten 2" Felder ausgeben kannst : ( hier wäre dann z.B. awk mit der Zählfähigkeit sinnvoller ) egal, hier mal ein Beispiel, wie man es rein mit Bash-Mitteln machen könnte. Als Beschreibung der Struktur sind die entsprechenden Regulären Ausdrücke drin: $ A="aa.name.txt" $ B="bb.ccc.name.txt" Suffix: das Wort nach dem letzten Punkt $ echo $( expr match "$A" '.*\.\(.*\)' ) txt $ echo $( expr match "$B" '.*\.\(.*\)' ) txt "Name" das Wort nach dem vorletzen und vor dem letzten Punkt $ echo $( expr match "$A" '.*\.\(.*\)\..*' ) name $ echo $( expr match "$B" '.*\.\(.*\)\..*' ) name "erstes Wort" alles bis zum vorletzen Punkt $ echo $( expr match "$A" '\(.*\)\..*\..*' ) aa $ echo $( expr match "$B" '\(.*\)\..*\..*' ) bb.ccc $ statt dem echo dann halt ein VAR=$( expr foo ) nutzen. Gruß Andreas