What's the default order of Linux sort?
Looks like you are using a non-POSIX locale.
Try:
export LC_ALL=C
and then sort
.
info sort
clearly says:
(1) If you use a non-POSIX locale (e.g., by setting `LC_ALL' to `en_US'), then `sort' may produce output that is sorted differently than you're accustomed to. In that case, set the `LC_ALL' environment variable to `C'. Note that setting only `LC_COLLATE' has two problems. First, it is ineffective if `LC_ALL' is also set. Second, it has undefined behavior if `LC_CTYPE' (or `LANG', if `LC_CTYPE' is unset) is set to an incompatible value. For example, you get undefined behavior if `LC_CTYPE' is `ja_JP.PCK' but `LC_COLLATE' is `en_US.UTF-8'.
As man sort
says, “dictionary-order” means
“consider only blanks and alphanumeric characters”.
For example, given the data
The
!quick
brown
@fox
jumps
#over
17
$lazy
dogs
%42
times.
the unadorned sort
command produces
dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.
(putting the lines that begin with the space characters
and the !
, #
, $
, %
, and @
symbols1
ahead of the lines that begin with letters and numbers;
i.e., alphanumeric characters), but sort -d
produces
dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.
dogs
is still first, because it begins with spaces,
but the special (punctuation) characters are ignored.
17
comes before 42
, and fox
comes between brown
and jumps
,
in spite of the fact that 42
and fox
have characters in front of them
that would normally move them before the 17
.
____________
1 in order of their ASCII values:
space=040, !
=041, #
=043, $
=044, %
=045, and @
=0100.
Note that (disregarding the space bar)
this is approximately left-to-right order on some keyboards.
To determine the sort order, simply create a file with a different character on each line and the sort it. The resulting output will tell you the sort order.