Nie znam żadnych ustawień narodowych, które domyślnie sortują w tej kolejności. Rozwiązaniem jest utworzenie niestandardowych ustawień regionalnych z niestandardowym porządkiem sortowania. Jeśli ktoś, cztery lata później, chce sortować w niestandardowy sposób, oto sztuczka.
Zdecydowana większość ustawień narodowych nie określa własnego porządku sortowania, ale raczej kopiuje zdefiniowany porządek sortowania, /usr/share/i18n/locales/iso14651_t1_common
abyś to właśnie chciał edytować. Zamiast zmieniać porządek sortowania dla prawie wszystkich ustawień regionalnych poprzez modyfikację oryginału iso14651_t1_common
, sugeruję, aby wykonać kopię. Szczegółowe informacje o tym, jak działa porządek sortowania i jak utworzyć niestandardowe ustawienia narodowe w $HOME
katalogu bez dostępu użytkownika root, znajdują się w tej odpowiedzi na podobne pytanie .
Zobacz, jak a
i A
są uporządkowane na podstawie ich wpisów w iso14651_t1_common
:
<U0061> <a>;<BAS>;<MIN>;IGNORE # 198 a
<U0041> <a>;<BAS>;<CAP>;IGNORE # 517 A
b
i B
są podobne:
<U0062> <b>;<BAS>;<MIN>;IGNORE # 233 b
<U0042> <b>;<BAS>;<CAP>;IGNORE # 550 B
Widzimy, że na pierwszym przejeździe, zarówno a
i A
mają symbol zestawiania <a>
, podczas gdy zarówno b
i B
mają symbol zestawiania <b>
. Ponieważ <a>
pojawia się przed <b>
w iso14651_t1_common
, a
i A
są związani przed b
i B
. Drugi przebieg nie zrywa więzi, ponieważ wszystkie cztery znaki mają symbol zestawiania <BAS>
, ale podczas trzeciego przejścia remisy są rozwiązywane, ponieważ symbol zestawienia małych liter <MIN>
pojawia się w linii 3467, przed symbolem zestawiania wielkich liter <CAP>
(linia 3488) . Zatem porządek kończy jako a
, A
, b
, B
.
Zamiana pierwszego i trzeciego zestawionego symbolu posortowałaby litery najpierw według wielkości liter (najpierw niższa niż górna), następnie według akcentu ( <BAS>
czyli bez akcentu), a następnie według kolejności alfabetycznej. Jednakże , zarówno <MIN>
i <CAP>
przyjść przed cyfr, więc byłoby to mieć niepożądany wpływ wprowadzenie cyfry po literami.
Najłatwiejszym sposobem, aby cyfry były pierwsze, a wszystkie małe litery pojawiały się przed wszystkimi dużymi literami, jest wymuszenie wiązania wszystkich liter podczas pierwszego porównania, ustawiając je wszystkie na równe <a>
. Aby upewnić się, że sortują alfabetycznie według wielkości liter, zmień ostatni symbol zestawiania z IGNORE
na bieżący pierwszy symbol zestawiania. Zgodnie z tym wzorem a
stałoby się:
<U0061> <a>;<BAS>;<MIN>;<a> # 198 a
A
stanie się:
<U0041> <a>;<BAS>;<CAP>;<a> # 517 A
b
stanie się:
<U0062> <a>;<BAS>;<MIN>;<b> # 233 b
B
stanie się:
<U0042> <a>;<BAS>;<CAP>;<b> # 550 B
i tak dalej dla pozostałych liter.
Po utworzeniu dostosowanej wersji iso14651_t1_common
postępuj zgodnie z instrukcjami w odpowiedzi powyżej, aby skompilować niestandardowe ustawienia regionalne.
sort
, ale w przypadku średnika zmienna jest lokalna dla powłoki i nie wpływa na zachowaniesort
. Średnik można zachować tak, jak gdyby zmienna została również wyeksportowana, ale wpłynęłoby to również na inne polecenia.