'-e 'Q\ns\nV' эха | вид' не сортирует

Используйте CentOS. Но позвольте своему штату выбрать, использовать ли KDE или GNOME.

Debian будет изменяться слишком часто. RH объявила о поддержке целых 10 лет для RH5 и RH6 - который является длинным путем для движения.

1
21.01.2013, 12:08
2 ответа

На большинстве языков, s виды прежде V независимо от случая.

Сортировка зависит от настроек локализации (LANG и LC_* переменные).

Вы могли использовать: LC_ALL=C sort если Вы хотели отсортировать согласно порядку значения байта, но это не может сделать то, что Вы хотите, если Вы находитесь в многобайтовой локали.

Если Вы хотите отсортировать в порядке Вашего собственного языка, но имеющий прописные буквы перед строчными, Вы могли сделать:

sed 's/./0&/g;s/0\([[:lower:]]\)/1\1/g' |
  sort |
sed 's/.\(.\)/\1/g'

Это заставило бы строчные буквы быть отсортированными после любого символа.

$ print -l Q s d é f D É F V | sort
d
D
é
É
f
F
Q
s
V

$ print -l Q s d é f D É F V | sed 's/./0&/g;s/0\([[:lower:]]\)/1\1/g' |
 sort |
 sed 's/.\(.\)/\1/g'
D
É
F
Q
V
d
é
f
s

Это только работало бы в локалях, где сопоставляющие элементы являются отдельными символами только.

4
27.01.2020, 23:13
  • 1
    , но я действительно удивлен предложением "На большинстве языков, s виды прежде V независимо от случая".. Это звучит как странный :-) –  Pierre 21.01.2013, 14:17
  • 2
    @Pierre. Он? В желтых страницах в Вашей стране прописные имена отсортированы перед нижнего регистра? –  Stéphane Chazelas 21.01.2013, 14:31
  • 3
    , который я имел в виду, я не использовал-i опцию, таким образом, я ожидал, что верхний регистр будет отсортирован перед нижним регистром... –  Pierre 21.01.2013, 15:06
  • 4
    Там не является никакими "именами нижнего регистра", "у Jorge de la Puente" есть "Puente" как фамилия. –  vonbrand 21.01.2013, 18:41

sortпорядок сортировки зависит от настроек локали Вашей среды. От sort страница справочника.

   *** WARNING *** The locale specified by the environment affects sort  order.
   Set LC_ALL=C to get the traditional sort order that uses native byte values.

POSIX или локаль C сделают sort ведите себя как ожидалось:

reedm@www:~ $ echo -e 'Q\ns\nV' | LC_ALL='' sort 
Q
s
V
reedm@www:~ $ echo -e 'Q\ns\nV' | LC_ALL='' sort --ignore-case
Q
s
V
reedm@www:~ $ echo -e 'Q\ns\nV' | LC_ALL='c' sort 
Q
V
s
reedm@www:~ $ echo -e 'Q\ns\nV' | LC_ALL='c' sort --ignore-case
Q
s
V
3
27.01.2020, 23:13

Теги

Похожие вопросы