2015-01-31 7 views
22

Wow, das entspricht tatsächlich einem é. Was ist hier passiert? Ich möchte, dass es nichts anderem als typischen Kleinbuchstaben entspricht.Wie passte [a-z] é?

$ echo "frappé"|egrep -E "^[a-z]+$" 
frappé 

egrep (GNU grep) 2.16 auf Ubuntu 14.04

+0

ich gerade versucht, diese auf meinem Mac, und der Ausdruck nicht alles akzeptiert, so wie es sein sollte . Auf welchem ​​System laufen Sie? – dasblinkenlight

+0

Passt nicht zu mir: https://www.regex101.com/r/zD2lX8/1 –

+0

https://www.regex101.com/r/zD2lX8/2 –

Antwort

31

Ihre locale Einstellung teilt egrep/grep -E wie die [a-z] Zeichenbereich zu sammeln.

$ export LC_COLLATE=C 
$ echo "frappé" | egrep '^[a-z]+$' 
# no match 

$ export LC_COLLATE=en_US.utf8 
$ echo "frappé" | egrep '^[a-z]+$' 
frappé 

Named Charakterklassen können trotz des Lokals mit diakritischen Zeichen verwendet werden, um Zeichen zu entsprechen:

$ export LC_COLLATE=C 
$ echo "frappé" | egrep '^[[:lower:]]+$' 
frappé 
+0

Der Grund dafür, dass der Basismodus nicht zusammenpasst, ist, dass '+' im Grundmodus nur einem Literal '+' entspricht. 'echo" frappé "| grep '^ [a-z] * $' 'stimmt überein. (Ich weiß nicht über '-P', das ist in meinem Grep deaktiviert.) – hvd

+0

Guter Punkt über -G,' echo "é" | LC_COLLATE = de_DE.utf8 grep -G '^ [a-z] $' 'passt. –

Verwandte Themen