Não conheço nenhum local que, por padrão, classifique nessa ordem. A solução é criar um código de idioma personalizado com uma ordem de classificação personalizada. Se alguém, quatro anos depois, quiser classificar de maneira personalizada, aqui está o truque.
A grande maioria dos códigos de idioma não especifica sua própria ordem de classificação, mas copia a ordem de classificação definida em, /usr/share/i18n/locales/iso14651_t1_common
e é isso que você deseja editar. Em vez de alterar a ordem de classificação para quase todos os locais, modificando o original iso14651_t1_common
, sugiro que você faça uma cópia. Detalhes sobre como a ordem de classificação funciona e como criar um código de idioma personalizado em seu $HOME
diretório sem acesso root são encontrados nesta resposta a uma pergunta semelhante .
Veja como a
e A
são ordenados com base em suas entradas em iso14651_t1_common
:
<U0061> <a>;<BAS>;<MIN>;IGNORE # 198 a
<U0041> <a>;<BAS>;<CAP>;IGNORE # 517 A
b
e B
são semelhantes:
<U0062> <b>;<BAS>;<MIN>;IGNORE # 233 b
<U0042> <b>;<BAS>;<CAP>;IGNORE # 550 B
Vemos que, na primeira passagem, ambos a
e A
têm o símbolo de intercalação <a>
, enquanto ambos b
e B
têm o símbolo de intercalação <b>
. Desde <a>
aparece antes <b>
em iso14651_t1_common
, a
e A
está empatado antes b
e B
. A segunda passagem não quebra os empates porque todos os quatro caracteres têm o símbolo de intercalação <BAS>
, mas durante a terceira passagem os empates são resolvidos porque o símbolo de intercalação para letras minúsculas <MIN>
aparece na linha 3467, antes do símbolo de intercalação para letras maiúsculas <CAP>
(linha 3488) . Assim, a ordem de classificação termina como a
, A
, b
, B
.
Trocar o primeiro e o terceiro símbolos de ordenação classificaria as letras primeiro por maiúsculas e minúsculas (mais baixo e mais alto), depois por sotaque ( <BAS>
significa sem sotaque) e depois por ordem alfabética. No entanto , ambos <MIN>
e <CAP>
vêm antes dos dígitos numéricos, portanto, isso teria o efeito indesejado de colocar dígitos após as letras.
A maneira mais fácil de manter os dígitos primeiro e fazer todas as letras minúsculas aparecerem antes de todas as letras maiúsculas é forçar todas as letras a serem amarradas durante a primeira comparação, definindo todas iguais <a>
. Para garantir que eles ordenem alfabeticamente dentro de maiúsculas e minúsculas, altere o último símbolo de intercalação de IGNORE
para o atual primeiro símbolo de intercalação. Seguindo esse padrão, a
seria:
<U0061> <a>;<BAS>;<MIN>;<a> # 198 a
A
se tornaria:
<U0041> <a>;<BAS>;<CAP>;<a> # 517 A
b
se tornaria:
<U0062> <a>;<BAS>;<MIN>;<b> # 233 b
B
se tornaria:
<U0042> <a>;<BAS>;<CAP>;<b> # 550 B
e assim por diante pelo resto das cartas.
Depois de criar uma versão personalizada iso14651_t1_common
, siga as instruções na resposta vinculada acima para compilar seu código de idioma personalizado.
sort
, mas com o ponto e vírgula a variável é local para o shell e não afeta o comportamento desort
. O ponto e vírgula pode ser mantido como se a variável também fosse exportada, mas isso também afetaria outros comandos.