PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sed Zahl aus String holen



der_rokko
15-05-2005, 22:47
Hallo zusammen

Ich bin nun doch schon einige Stunden an diesem Problem dran. Und zwar möchte ich aus einem String eine Zahl herausholen.
Zuerst mal wie der String aussieht:
./blackmail/blackmail - bliss, please - 10 - frop.mp3: MPEG ADTS, layer III, v1, 128 kBits, 44.1 kHz, Stereo

Was ich will ist die Bitrate (128).

Nun das was ich mit Bash-scripten versucht habe:

a=$(file './blackmail/blackmail - bliss, please - 10 - frop.mp3' | sed "s/\(\d{3}\) kBits/\1/")
echo $a

Ausgegeben wird dasselbe, was reinkommt...
Wo liegt mein Denkfehler?

Ich danke euch für die Hilfe :)
der_rokko

Der Untergeher
15-05-2005, 23:20
Hi,

der reguläre Ausdruck "matched" nicht die Eingabe - also wird sie unverändert wieder ausgegeben. Besser:

a=$(file './blackmail/blackmail - bliss, please - 10 - frop.mp3' | sed s/".* \([0-9]*\) kBits.*"/"\1"/)
echo $a

der_rokko
16-05-2005, 14:05
Vielen Dank, so klappt das!

Nun habe ich das Problem, dass ich den Pfad per Variable übergebe und dort noch entsprechend Anführungszeichen setzen muss.


$bitrate=$(file "$1" | sed s/"^.* \([0-9]*\) kBits.*$"/"\1"/)
Nun, egal wie ich das $1 verpacke (in ', ", ' oder auch `), es funktioniert nicht, die Leerzeichen werden als Trenner behandelt oder ein Usage-Fehler ausgegeben (Syntax falsch).
Wie macht Ihr das jeweils?
Es sollte später auch möglich sein, Dateinamen mit Anführungszeichen zu übergeben (z.B. bei "don't")

PS: Ich habe mir nun das Buch "Shell-Skript Programmierung" von P. Ditchen bestellt, um die Shellprogrammierung zu lernen. Dieses wurde an mehreren Orten empfohlen. Dann kann ich solche Probleme endlich auch alleine lösen :)

Joghurt
16-05-2005, 15:24
Du musst dein Skript ebenfalls mit
skript "Dateiname" aufrufen.

der_rokko
16-05-2005, 16:08
Ich habs mit einfachen Ausführungszeichen aufgerufen, da funktionierte das leider nicht so gut :)

Danke!

der_rokko
12-06-2005, 12:16
Falls es jemanden interessiert:
`file` ist nicht sehr zuverlässig, um Bitraten von MP3s herauszufinden. Ich nutze nun das Programm mp3info. Damit ist es ebenfalls möglich, die Bitrate direkt anzuzeigen und nicht via sed herauszufinden:
mp3info "$1" -p %r