Pagina 1 di 1

uhm.. stranezza di bash...

Inviato: dom 21 ott 2007, 15:00
da nino
Salve a tutti,
sto diventando matto cercando di fare uno script che aggiunga in automatico le informazioni di tag(artista genere album ecc.) ad alcuni file mp3, servendosi di un file .cue.

Per fare questo ho bisogno di confrontare la stringa riguardante il genere presa dal file .cue con il genere supportato dal lame(lame --genre-list).
La cosa strana è che nonstante le due stringhe siano uguali, non combaciano mai, e quindi grep non lavora a dovere:
Se da console assegno la variabile genre in questo modo:

Codice: Seleziona tutto

genre=Rock
ed assegno ad una variabile genre2 lo stesso valore, ma ricavato da un file .cue:

Codice: Seleziona tutto

genre2=`grep GENRE file.cue | taglia_tutti_i_caratteri_in_eccesso`
ottengo che le due variabili sono diverse in lunghezza:

Codice: Seleziona tutto

 expr length $genre ; expr length $genre2
4
5
che faccio?

grazie in anticipo a tutti

Inviato: dom 21 ott 2007, 15:12
da JohnnyMnemonic
Il carattere in più dovrebbe essere un a capo se non sbaglio

Inviato: dom 21 ott 2007, 15:27
da nino
sembra di no:

Codice: Seleziona tutto

$ genre=`grep GENRE file.cue | cut -d " " -f3 | tr -d \n` ; echo $genre
Rock
$ expr length $genre
5

a meno che non ci sia un altro modo di togliere il segno di a capo! :(

Inviato: dom 21 ott 2007, 15:47
da bloodlust
non è magari una stringa terminata con NULL (0x0)?

Inviato: dom 21 ott 2007, 15:54
da nino
mi restituisce sempre lunghezza 5:

Codice: Seleziona tutto

 $ genre=`grep GENRE file.cue | cut -d " " -f3 | tr -d "(0X0)"` ; echo $genre
Rock
$ expr length $genre
5

Ma anche a voi il comando grep fa ste cose??

Inviato: dom 21 ott 2007, 17:49
da Mario Vanoni
nino ha scritto:mi restituisce sempre lunghezza 5:

Codice: Seleziona tutto

 $ genre=`grep GENRE file.cue | cut -d " " -f3 | tr -d "(0X0)"` ; echo $genre
Rock
$ expr length $genre
5

Ma anche a voi il comando grep fa ste cose??
Premessa: uso da sempre nvi-1.79, non elvis o vim!

vi fantasia
:i
z GENRE Rock
Escape
:wq

poi quello che fai tu, con il file fantasia

expr length $genre risponde 4 (quattro)

vi fantasia
:A
Ctrl-VCtrl-C
:wq

idem come sopra

expr length $genre risponde 5 (cinque)

Quindi hai un control character non visibile attaccato a Rock.

Nel vi
:set list
e dovresti vederlo,
nvi lo fa vedere anche senza :se[t] list.

Mario Vanoni

Inviato: dom 21 ott 2007, 18:19
da nino
Si tratta proprio di un control character, fino a 10 minuti fa ne ignoravo anche l'esistenza :D.

Effettivamente vi ti fa vedere i control character con :set list (grazie Mario) con un $ alla fine della stringa e grep se lo prende come se fosse parte della stringa.
Tramite il comando tr è possibile "trimmare il control character":

Codice: Seleziona tutto

$ genre=`grep GENRE Smashing\ Pumpkins\ -\ Zeitgeist\ \(Amazon\ Edition\).cue | cut -d " " -f3 | tr -d [:cntrl:]`
$ expr length $genre
4
Grazie a tutti ;)

ciaoo