[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: