Stai dimenticando per sfuggire alla meta personaggi.
grep -e '"[a-z]\+"'
Per la seconda parte, il motivo per cui si abbinano i caratteri multi-caso è a causa delle impostazioni locali. Come segue:
$ echo '"Abc"' | grep -e '"[a-z]\+"'
"Abc"
$ export LC_ALL=C
$ echo '"Abc"' | grep -e '"[a-z]\+"'
$
per ottenere il comportamento "ascii-like", è necessario impostare le impostazioni internazionali a "C", come specificato nella pagina di grep man:
All'interno di un'espressione parentetica, un'espressione di intervallo è composta da due caratteri separati da un trattino. Corrisponde a qualsiasi singolo carattere che ordina tra i due caratteri, compreso, utilizzando la sequenza di fascicolazione e il set di caratteri della locale. Ad esempio, nel locale C predefinito di , [a-d] è equivalente a [abcd]. Molte localizzazioni ordinano i caratteri nell'ordine dei dizionari e in queste localizzazioni [a-d] è in genere non equivalente a [abcd]; potrebbe essere equivalente a [aBbCcDd], per esempio. Per ottenere l'interpretazione tradizionale della espressioni fra parentesi quadre, è possibile utilizzare la versione locale C impostando la variabile d'ambiente LC_ALL al valore C.
fonte
2012-05-10 18:50:04
Il tuo secondo regex sembra buono. L'ho provato e non corrisponde ai caratteri maiuscoli. – Misha
@Mike ti stai dimenticando dell'ordine di fascicolazione specifico della locale. –
@Don Grazie, non ci ho nemmeno pensato! – Misha