`echo -e 'Q\ns\nV' sort`가 정렬되지 않습니다.

`echo -e 'Q\ns\nV' sort`가 정렬되지 않습니다.

왜:

$ echo -e 'Q\ns\nV'  | sort 

산출

Q
s
V

내 목록의 순서를 변경하지 않고(소문자/대문자를 고려합니까?)

답변1

대부분의 언어에서는 s대소문자에 관계없이 모든 것이 먼저 정렬됩니다.V

정렬은 현지화 설정( LANGLC_*변수)에 따라 달라집니다.

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

이는 조합 요소가 단일 문자인 로케일에만 적용됩니다.

답변2

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

관련 정보