Oppure

Loading
24/03/10 13:44
matteo88roma
Salve ragazzi/e, scrivo qui per avere un consiglio sul seguente problema.
Utilizzo Fedora 12 (Constantine) e grep non funziona bene.

Ho necessità di filtrare un argomento in un bash script per verificare che sia un nome Java valido, quindi ho scritto la seguente regular expression:

^[A-Z]+[a-z]*$


Testandola tramite vari tester reperibili online, ho verificato che funziona correttamente.
Nel mio script è possibile utilizzare solo un argomento, quindi .

La porzione di codice che effettua il controllo è la seguente:

echo  | grep -E '^[A-Z]+[a-z]*$'


Se inserisco ad esempio String, File, System, C, B... il matching viene eseguito correttamente.
Il problema viene anche quando inserisco stringhe teoricamente scorrette.
Se inserisco "string", "hello" il matching ha successo! :noway: (nonostante io abbia specificato che la prima lettera deve essere maiuscola!)

Come Shell utilizzo la bash e uso l'ultima versione di grep disponibile, la 2.6.
Non utilizzo alias per i vari comandi.

Nota Divertente: sugli altri linux non ho questo problema, è una cosa ristretta al mio laptop! xD:rotfl:

Grazie mille per il vostro aiuto!

aaa
24/03/10 13:56
TheKaneB
O_O
prova con il comando egrep.

se non funziona, prova a consultare la mailing list di grep e i forum di fedora... se le cose stanno come dici, potrebbe trattarsi di un bug di quella particolare versione, o un bug introdotto dal team che ha compilato e impacchettato grep (quindi redhat/fedora).

PS: potrebbe anche darsi che usa un formato diverse per le regex.. consulta anche il man di grep ed eventuali file di configurazione in /etc/ e nella tua home..
Ultima modifica effettuata da TheKaneB 24/03/10 13:59
aaa
24/03/10 14:34
matteo88roma
Un mio amico mi ha fatto fare una prova....

Invece di...

 echo  | grep -E '^[A-Z]+[a-z]*$'


Mi ha fatto scrivere...

 echo  | grep -E '^[QWERTYUIOPASDFGHJKLZXCVBNM]+[a-z]*$'


Anche se è una cosa orrenda da vedere, funziona! :om:
Può essere che non interpreta il range A-Z? o_o
aaa
24/03/10 14:49
TheKaneB
se non interpreta il range A-Z, non interpreta nemmeno a-z...

prova a sostituire [A-Z] con [:upper:] e [a-z] con [:lower:]
Ultima modifica effettuata da TheKaneB 24/03/10 14:51
aaa
24/03/10 14:53
TheKaneB
forse ho trovato:
Many locales sort characters in dictio-
nary order, and in these locales [a-d] is typically not equivalent to
[abcd]; it might be equivalent to [aBbCcDd], for example. To    obtain
the traditional interpretation of bracket expressions, you can use the
C locale by setting the LC_ALL environment variable to the value C.


da unixhelp.ed.ac.uk/CGI/…

quindi prova con
export LC_ALL="C"
prima di eseguire lo script (magari salva il vecchio contenuto in una variabile temporanea e ripristinalo all'uscita).
Ultima modifica effettuata da TheKaneB 24/03/10 14:54
aaa
24/03/10 15:16
matteo88roma
Funziona!!!! Mitico ^^
aaa
24/03/10 15:21
TheKaneB
man pages rulez :D
aaa