sort
Утилита в Ubuntu 10.04 (Lucid) всегда сортировать по нечувствительны к регистру, так же , как если вы укажете --ignore-case
ему.
The two sort just give the same result:
echo -e "c\nb\nB\na" | sort
echo -e "c\nb\nB\na" | sort --ignore-case
Но иногда я хочу сортировать по регистру, поэтому сначала идут заглавные буквы, а затем строчные. Является ли это возможным?
echo $'B\nÄ\nb\na' | LC_COLLATE=C sort
. Если не тот факт , что GNUsort
с непостояннымC
локали всегда выполняет сортировку без учета регистра будет считаться ошибкой ?C.UTF-8
locale (LC_COLLATE=C.UTF-8
) будет сортировать с учетом регистра, обрабатывая не-ascii символы UTF-8 «нормально». К сожалению, он недоступен в апстриме в glibc и исправлен только Debian, Ubuntu и производными.Интересно, что доступен еще один порядок сортировки:
который помещает заглавную букву перед соответствующей строчной буквой.
Вот сравнение их выходных данных (я добавил «d» и «D») в
en_US.UTF-8
локали (кроме переопределенных):echo -e "d\nD\nc\nb\nB\na" | sort
echo -e "d\nD\nc\nb\nB\na" | sort --ignore-case
echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort
echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort --ignore-case
Выход:
источник
sort
v5.93
(поставляется с OS X 10.9.3 (!)) Иv8.13
, но не вv8.21
иv8.22
. Я думаю, что результаты 2. и 4. все еще можно считать эквивалентными (но это, очевидно, изменится с добавлением иностранных символов).