PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shellscript Dateiendung abschneiden



BerndDasBrot
16.03.07, 08:47
Hallo.
Wie kann ich wirksam eine Dateiendung abschneiden?
Prinzipielle geht das ja u.a. so:

test=$(echo $1 | sed -e "s/\....$//")
echo $test

Problem hierbei ist das es nur für Dateien funktioniert, wo die Endung 3 Zeichen lang ist.

Ich suche nun eine Möglichkeit eine Dateiendung abzuschneiden die quasi beliebig lang ist.

Jemand eine Idee oder gar was fertiges dafür?

tazdevil77
16.03.07, 09:55
wenn der suffix bekannt ist:

basename test.jpg .jpg

sonst:

test=$(echo $1 | sed -r -e 's/(.*)\.(.*)/\1/')

und hiermit bekommst du den suffix:

test=$(echo $1 | sed -r -e 's/(.*)\.(.*)/\2/')

BerndDasBrot
16.03.07, 10:11
Ja die Dateiendung ist nicht bekannt. Hatte ich vergessen zu erwähnen, aber ich dachte das wird klar indem ich sagte das die Dateiendung beliebig sein kann ;)
Wie auch immer. Das funktioniert einwandfrei.

test=$(echo $1 | sed -r -e 's/(.*)\.(.*)/\1/')
Vielen Dank.

tazdevil77
16.03.07, 10:20
natuerlich ;)

um mal klugzu*******en, du hattest geschrieben "beliebig lang" nicht "beliebig". :p
deswegen hatte ich auch noch basename angeboten.

MiGo
16.03.07, 12:20
test=$(echo $1 | sed -r -e 's/(.*)\.(.*)/\1/')
Achtung:
Google sagt, regexp in sed ist per default gierig - du machst damit also aus "Datei.lustiger.film.avi" ein "Datei".

tazdevil77
16.03.07, 12:50
das soll ja auch greedy sein, und aus "Datei.lustiger.film.avi" wird "Datei.lustiger.film". ;)
was du meinst ist "not greedy".

gmk
16.03.07, 18:18
hmm wie wäre es mit

var="datei.foo.bar"
echo ${var%.*}