У меня есть образец файла, содержащий символы «aA0_-» на каждом из них на одном. Сортировка с использованием GNU sort дает следующий порядок сортировки:
$ cat /tmp/sample | sort
_
-
0
a
A
после добавления какого-либо другого символа мы получаем другой порядок (не алфавитно-цифровые символы, кажется, имеют более низкий приоритет):
$ cat /tmp/sample | sed 's/$/x/' | sort
0x
ax
Ax
x
_x
-x
пока мы вставляем этот символ в начало, мы получаем исходный порядок сортировки:
$ cat /tmp/sample | sed 's/^/x/' | sort
x
x_
x-
x0
xa
xA
.. Чем объясняется такое поведение?
UPDATE
когда в образец включены символы 'z
' и 'Z
', результат кажется еще более странным:
$ cat /tmp/sample | sed 's/$/x/' | sort
0x
ax
Ax
x
_x
-x
zx
Zx
.. но в свете правильного ответа это так, потому что все '
', '_
' и '-
' являются пробелами в текущей локали (en_US.UTF-8) и не игнорируются при сортировке.