Neste comando:
$ echo "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
> sed 's/[a-z]//g'
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Parece correto, não é?
No entanto, a localidade em vigor é en_US.utf8
. A ordem de intercalação para essa localidade é (usando o bash ):
$ printf '%b' "$(printf '\U%x\0' {65..90} {97..122})" | sort -z; echo
aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
Ou, se o seu sort
não puder usar -z:
$ printf '%s' $(printf '%s\n' {a..z} {A..Z} | sort); echo
aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
Se isso estiver correto, o intervalo [b-y]
deve corresponder a todos os caracteres acima, exceto aAYzZ
.
Mas isso não acontece.
O Grep faz o mesmo em [a-z]
. Corresponde a todos os caracteres minúsculos (até acentuados):
$ printf '%s' $(printf '%s' {a..z} {A..Z} éáíèüÉÁÍÈÜ | grep -o '[a-z]'); echo
abcdefghijklmnopqrstuvwxyzéáíèü
E com [a-Z]
corresponde a todos os caracteres (esse intervalo deve ser inválido):
$ printf '%s' $(printf '%s' {a..z} {A..Z} éáíèüÉÁÍÈÜ | grep -o '[a-Z]'); echo
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZéáíèüÉÁÍÈÜ