답변:
데이터 정렬 순서를 재정의합니다.
echo -e "c\nb\nB\na" | LC_COLLATE=C sort
C.UTF-8로케일 ( LC_COLLATE=C.UTF-8)은 ASCII가 아닌 UTF-8 문자를 "일반적으로"처리하는 동안 대소 문자를 구분하여 정렬합니다. 불행히도 glibc에서는 업스트림으로 제공되지 않으며 데비안, 우분투 및 파생 제품에서만 패치됩니다.
흥미롭게도 다음과 같이 또 다른 정렬 순서를 사용할 수 있습니다.
echo -e "c\nb\nB\na" | LC_COLLATE=C sort --ignore-case
대문자를 해당하는 소문자 앞에 넣습니다.
다음은 en_US.UTF-8로케일 에서 출력을 비교 한 것입니다 ( "d"와 "D"를 추가했습니다) (재정의 된 경우 제외).
echo -e "d\nD\nc\nb\nB\na" | sortecho -e "d\nD\nc\nb\nB\na" | sort --ignore-caseecho -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sortecho -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort --ignore-case산출:
1 2 3 4
- - - -
a a B a
b b D B
B B a b
c c b c
d d c D
D D d d
sort v5.93(OS X 10.9.3 (함께 제공됩니다!)) 및 v8.13있지만에서 v8.21와 v8.22. 나는 2와 4의 결과가 여전히 동등한 것으로 간주 될 수 있다고 생각합니다 (그러나 외래 문자를 추가하면 분명히 바뀔 것입니다).
echo $'B\nÄ\nb\na' | LC_COLLATE=C sort. 로케일sort이 아닌 GNU 가 항상 대소 문자를 구분하지 않는 정렬을 수행 한다는 사실을 버그 로 간주해서는 안 됩니까?C