Re: punkte zählen
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
Reply to: