Sembra che tu stia utilizzando una locale non POSIX.
Prova:
export LC_ALL=C
e poi sort
.
info sort
dice chiaramente:
(1) Se usi un locale non POSIX (ad esempio, impostando `LC_ALL' su `en_US'), allora `sort' potrebbe produrre un output ordinato in modo diverso da quello a cui sei abituato. In tal caso, impostare la variabile d'ambiente `LC_ALL' su `C'. Si noti che impostare solo `LC_COLLATE' ha due problemi. Primo, è inefficace se è impostato anche `LC_ALL'. In secondo luogo, ha un comportamento indefinito se `LC_CTYPE' (o `LANG', se `LC_CTYPE' non è impostato) è impostato su un valore incompatibile. Ad esempio, ottieni un comportamento indefinito se `LC_CTYPE' è `ja_JP.PCK' ma `LC_COLLATE' è `en_US.UTF-8'.
Come man sort
dice, "ordine del dizionario" significa "considera solo spazi vuoti e caratteri alfanumerici". Ad esempio, dati i dati
The
!quick
brown
@fox
jumps
#over
17
$lazy
dogs
%42
times.
il disadorno sort
comando produce
dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.
(mettendo le righe che iniziano con i caratteri spazio e il !
, #
, $
, %
e @
simboli davanti alle righe che iniziano con lettere e numeri;ad esempio, caratteri alfanumerici ), ma sort -d
produce
dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.
dogs
è ancora primo, perché inizia con spazi, ma i caratteri speciali (punteggiatura) vengono ignorati. 17
viene prima di 42
e fox
si trova tra brown
e jumps
,nonostante il fatto che 42
e fox
avere caratteri davanti a loro che normalmente li sposterebbero prima del 17
.
____________
in ordine di valori ASCII:spazio=040, !
=041, #
=043, $
=044, %
=045 e @
=0100. Nota che (ignorando la barra spaziatrice) questo è approssimativamente l'ordine da sinistra a destra su alcune tastiere.
Per determinare l'ordinamento, crea semplicemente un file con un carattere diverso su ogni riga e ordinalo. L'output risultante ti dirà l'ordinamento.