Potrebbe essere la stessa direfferenza che esiste tra le classi di carattere e il range di caratteri. Guarda cosa dice il man di grep a riguardo:
man grep ha scritto: Within a bracket expression, a range expression consists of two characters separated by a hyphen. It matches any single character that sorts between the two
characters, inclusive, using the locale's collating sequence and character set. For example, in the default C locale, [a-d] is equivalent to [abcd]. Many locales
sort characters in dictionary 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.
Emanuele