uhm.. stranezza di bash...

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
nino
Linux 1.x
Linux 1.x
Messaggi: 130
Iscritto il: gio 22 dic 2005, 12:33
Contatta:

uhm.. stranezza di bash...

Messaggio 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

Avatar utente
JohnnyMnemonic
Staff
Staff
Messaggi: 2733
Iscritto il: dom 5 set 2004, 0:00
Nome Cognome: Giuseppe Palmiotto
Slackware: 14.0
Kernel: 3.5.5-thanatos
Località: Bologna
Contatta:

Messaggio da JohnnyMnemonic »

Il carattere in più dovrebbe essere un a capo se non sbaglio

nino
Linux 1.x
Linux 1.x
Messaggi: 130
Iscritto il: gio 22 dic 2005, 12:33
Contatta:

Messaggio 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! :(

bloodlust
Linux 3.x
Linux 3.x
Messaggi: 523
Iscritto il: mar 14 feb 2006, 12:02
Slackware: -1
Località: it_IT

Messaggio da bloodlust »

non è magari una stringa terminata con NULL (0x0)?

nino
Linux 1.x
Linux 1.x
Messaggi: 130
Iscritto il: gio 22 dic 2005, 12:33
Contatta:

Messaggio 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??

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Messaggio 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

nino
Linux 1.x
Linux 1.x
Messaggi: 130
Iscritto il: gio 22 dic 2005, 12:33
Contatta:

Messaggio 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

Rispondi