Il semble que vous utilisiez une locale non POSIX.
Essayez :
export LC_ALL=C
puis sort
.
info sort
dit clairement :
(1) Si vous utilisez une locale non POSIX (par exemple, en définissant `LC_ALL' sur `en_US'), alors `sort' peut produire une sortie triée différemment de celle à laquelle vous êtes habitué. Dans ce cas, définissez la variable d'environnement `LC_ALL' sur `C'. Notez que définir uniquement `LC_COLLATE' présente deux problèmes. Premièrement, il est inefficace si `LC_ALL' est également défini. Deuxièmement, il a un comportement indéfini si `LC_CTYPE' (ou `LANG', si `LC_CTYPE' n'est pas défini) est défini sur une valeur incompatible. Par exemple, vous obtenez un comportement indéfini si `LC_CTYPE' est `ja_JP.PCK' mais `LC_COLLATE' est `en_US.UTF-8'.
Comme man sort
dit, "ordre du dictionnaire" signifie "considérer uniquement les blancs et les caractères alphanumériques". Par exemple, étant donné les données
The
!quick
brown
@fox
jumps
#over
17
$lazy
dogs
%42
times.
le sort
sans fioritures commande produit
dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.
(en mettant les lignes qui commencent par les espaces et le !
, #
, $
, %
, et @
symboles devant les lignes commençant par des lettres et des chiffres ; c'est-à-dire des caractères alphanumériques ), mais sort -d
produit
dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.
dogs
est toujours le premier, car il commence par des espaces, mais les caractères spéciaux (ponctuation) sont ignorés. 17
vient avant 42
, et fox
est compris entre brown
et jumps
,malgré le fait que 42
et fox
ont des caractères devant eux qui les déplaceraient normalement avant le 17
.
____________
dans l'ordre de leurs valeurs ASCII :space=040, !
=041, #
=043, $
=044, %
=045 et @
=0100. Notez que (sans tenir compte de la barre d'espace) c'est approximativement l'ordre de gauche à droite sur certains claviers.
Pour déterminer l'ordre de tri, créez simplement un fichier avec un caractère différent sur chaque ligne et triez-le. La sortie résultante vous indiquera l'ordre de tri.