저는 Ubuntu 16.04_xfce xenial을 사용하고 있습니다.단지 올바른 로케일을 설정하는 것이 아닙니다., 또는 "자연 순서"를 사용하여 피연산자를 정렬합니다.
적절한 소스 파일을 정렬했습니다. 모든 줄은 "#", "##" 또는 "deb"로 시작됩니다. 나는 모든 빈 줄, "#"이 있는 모든 줄, 그 다음 "##", 마지막으로 "deb"로 시작하는 줄을 볼 것으로 예상합니다. 내 출력에서 약 9줄, 그 다음 25줄을 살펴보세요.
root@HEJ ~ $ sort /etc/apt/sources.list
## Also, please note that software in backports WILL NOT receive any review
# deb cdrom:[Xubuntu 16.04.1 LTS _Xenial Xerus_ - Release i386 (20160719)]/ xenial main multiverse restricted univer
# deb http://archive.canonical.com/ubuntu xenial partner
deb http://archive.canonical.com/ubuntu/ xenial partner
deb http://mirror.csclub.uwaterloo.ca/debian-multimedia/ stable main
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial main restricted
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial multiverse
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-security main restricted
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-security multiverse
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-security universe
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial universe
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-updates main restricted
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-updates multiverse
deb http://mirror.csclub.uwaterloo.ca/ubuntu/ xenial-updates universe
deb http://mirror.cs.pitt.edu/ubuntu/archive xenial-backports main restricted universe multiverse
deb http://mirror.cs.pitt.edu/ubuntu/archive xenial main restricted universe multiverse
deb http://mirror.cs.pitt.edu/ubuntu/archive xenial-updates main restricted universe multiverse
deb http://ppa.launchpad.net/cdemu/ppa/ubuntu xenial main
# deb http://reflection.oss.ou.edu/linuxmint/repos serena main upstream import backport
deb http://security.ubuntu.com/ubuntu/ xenial-security restricted universe multiverse main
deb http://www.4pane.co.uk/ubuntu/ xenial main
# deb-src http://archive.canonical.com/ubuntu xenial partner
# deb-src http://archive.canonical.com/ubuntu/ xenial partner
# deb-src http://mirror.csclub.uwaterloo.ca/debian-multimedia/ stable main
# deb-src http://mirror.csclub.uwaterloo.ca/debian-multimedia/ stable main
# deb-src http://mirror.cs.pitt.edu/ubuntu/archive xenial-backports main restricted universe multiverse
# deb-src http://mirror.cs.pitt.edu/ubuntu/archive xenial main restricted universe multiverse
# deb-src http://mirror.cs.pitt.edu/ubuntu/archive xenial-updates main restricted universe multiverse
# deb-src http://ppa.launchpad.net/cdemu/ppa/ubuntu xenial main
# deb-src http://reflection.oss.ou.edu/linuxmint/repos serena main upstream import backport
# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
# deb-src http://security.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse
# deb-src http://security.ubuntu.com/ubuntu xenial-security universe
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial universe
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ xenial-updates universe
# deb-src http://www.4pane.co.uk/ubuntu/ xenial main
# deb-src http://www.4pane.co.uk/ubuntu/ xenial main
# deb-src http://www.scootersoftware.com/ bcompare4 non-free
## distribution.
## extensively as that contained in the main release, although it includes
## Major bug fix updates produced after the final release of the
## multiverse WILL NOT receive any review or updates from the Ubuntu
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## N.B. software from this repository may not have been tested as
## newer versions of some applications which may provide useful features.
# newer versions of the distribution.
## or updates from the Ubuntu security team.
## 'partner' repository.
## respective vendors as a service to Ubuntu users.
## security team.
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
## team.
## team, and may not be under a free licence. Please satisfy yourself as to
## team, and may not be under a free licence. Please satisfy yourself as to
## This software is not part of Ubuntu, but is offered by Canonical and the
## Uncomment the following two lines to add software from Canonical's
## universe WILL NOT receive any review or updates from the Ubuntu security
## your rights to use the software. Also, please note that software in
## your rights to use the software. Also, please note that software in
유효한 로케일:
root@HEJ ~ $ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
연구 결과에 따르면 합리적인 결과를 얻으려면 그 이상 LC_COLLATE="en_US.UTF-8"
( LC_COLLATE="C.UTF-8"
또는 그 이상 ) 이 필요합니다 . LC_ALL=C
그런데 여기서 또 문제가 발생하는데...
단지 문자 순서의 문제라면 모든 "#"은 함께 정렬되어야 하고, 모든 "##"도 함께 정렬되어야 합니다.
하지만 무슨 일이 일어나는 것 같습니다 "#"과 "##"은정렬 키에서 제거, 이것이 데이터 정렬의 기능이라는 것을 믿을 수 없습니다.
내 정렬 키에 또 어떤 문제가 있나요?
정렬 순서에 관해 이야기할 때,특정 로케일의 문자 이진 순서는 어디에 문서화되어 있나요?, 즉 가능한 모든 문자를 사람이 읽을 수 있는 목록으로 정렬한 것입니까?
(en_US 로케일 정의를 상위 호환 가능하게 만들지 않은 사람들을 위한 여드름!)
답변1
그런 행동예순전히 로케일에 의해 제어되는 데이터 정렬 기능입니다 LC_COLLATE
. 유니코드 로케일 세트가 있기 때문에 glibc는 정의된 변형 중 하나에서 지정된 유니코드 정렬 순서를 사용하며 이는 다소 "자연스러운" 순서를 시도합니다.
이 주문은UTS 10 유니코드 정렬 알고리즘로 주문하다가변 대조 요소의 교대 가지치기, 및 사용 (아마도)기본 데이터 정렬 요소 테이블. 실제로 #
대부분의 다른 구두점 및 공백과 같은 문자는 다음 영숫자 문자 간의 차이보다 덜 중요한 것으로 간주되며 연결을 끊는 데에만 사용됩니다. 전체 알고리즘은 표준에 어느 정도 자세히 정의되어 있으며 더욱 복잡해집니다.
이것은가끔은 추천아니요설정 LANG
또는 LC_COLLATE
이런 이유로. 대신 LC_CTYPE
(UTF-8의 경우) 및 (선호하는 메시징 언어의 경우) 를 설정하고 LC_MESSAGES
대조를 POSIX 기본값으로 둘 수 있습니다. 어느 쪽을 선택하든 연쇄 효과가 있습니다.
귀하의 시스템에서 이는 아마도 에 정의 /usr/share/i18n/locales/iso14651_t1_common
되어 있고 에 포함되어 있으며 iso14651_t1
에 포함되어 있을 것입니다 en_US
. 다른 로케일의 순서는 근처 파일에 정의되며 일반적으로 지역화된 변경 사항이 있는 동일한 기본값을 기반으로 합니다(예: sv_SE
동일한 기반을 사용하지만 재정렬 ...zåäöø
, 축소 v
등 w
). 이 테이블은 선택되었으며 LC_COLLATE
실제로 시스템의 동작을 결정하며 유니코드 표준(이전 버전)에서 파생되었습니다. 다른 유니코드 버전을 사용하는 최신 또는 이전 시스템에서는 동일한 문자열이 다르게 비교될 수 있습니다.
다른 인코딩에는 전혀 관련이 없는 자체 별도의 테이블이 있습니다.
UTR에 제공된 비교 테이블의 문자열이 포함된 파일을 정렬하여 사양에 따라 시스템의 동작을 확인할 수 있습니다.
demark de‐Luge death deluge ☠sad de-luge de Luge ☠happy de‐luge ♡sad deLuge de luge ♡happy de-Luge
(이 단어에는 하이픈과 하이픈 빼기 기호가 모두 포함되어 있습니다.)
받아야 할 순서는 다음과 같습니다.
death
deluge
de luge
de-luge
de‐luge
deLuge
de Luge
de-Luge
de‐Luge
demark
☠happy
♡happy
☠sad
♡sad
보고서는 이 결과에 대해 (일부) 설명적인 설명을 제공합니다.
옮기다. 하이픈(Hyphen) 마이너스 기호와 하이픈은 하나로 묶인 것으로,
문자 "l"의 대문자와 소문자의 차이만큼 그 차이가 극적이지는 않습니다.
이 그룹화는 무시할 수 있지만 네 번째 수준의 차이점은 원래 기본 순서를
따르기 때문에 유니코드 순서보다 더 직관적입니다. 레벨 1-3에서는 ☠ 및 ♡ 기호가 무시됩니다.시프트 트림. 공백과 하이픈이 포함된 압축 버전 사이에 "deLuge"가 어떻게 나타나는지 확인하세요. 레벨 1-3에서는 ☠ 및 ♡ 기호가 무시됩니다.
이것은 약간 복잡합니다. "레벨 1-3"은 알고리즘의 다양한 레벨에 대한 동점 구분 가중치이며 기본 레벨 1이 가장 중요한 차별화 요소입니다. 이는 이미 필요한 것보다 더 많은 정보일 수 있지만 최소한 지정된 정렬 순서가 표시된 결과를 생성했는지 확인할 수 있습니다.
답변2
sort
귀하의 명령이 별칭이나 쉘 함수에 의해 무시될 수 있다고 생각합니다 .
정렬 옵션은 -d
다음과 같습니다.
-d, --dictionary-order
consider only blanks and alphanumeric characters
따라서 이 옵션을 사용하면 초기 버전과 #
결과가 LC_ALL=C
동일하더라도 무시됩니다.