나는 그들 모두를 시도했다
... | sort -k'1,1r' -k'2,2' -t'±'
... | sort -k'1,1r' -k'2,2' -t$'\xC2\xB1'
*$> sort: ±: Invalid argument*
정렬이 지원되지 않기를 바랍니다. 누락된 이스케이프 처리 또는 특수 문자 처리만 있을 뿐입니다.
내 설정은 다음과 같습니다
localhost:~ user$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
localhost:~ user$ sort --version
2.3-Apple (99)
답변1
당신이 보면Apple macOS 소스 코드sort
, 이를 약간 수정했습니다.FreeBSD의 기원.
특히, 당신은 같은 것을 찾을 것입니다-t
FreeBSD와 같은 어색하고 손상된 옵션 처리.
case 't':
while (strlen(optarg) > 1) {
if (optarg[0] != '\\') {
errc(2, EINVAL, "%s", optarg);
}
optarg += 1;
if (*optarg == '0') {
*optarg = 0;
break;
}
}
보시 -t
다시피 매개변수가 비어 있거나(이 경우 NUL이 구분 기호임) 단일 매개변수가 포함된 경우에만 가능합니다.바이트임의 개수의 \
문자로 시작하고 그 뒤에 바이트가 오거나(이 경우 바이트가 구분 기호로 사용됨) 0
뒤에 아무 것도 나오지 않습니다. 이 경우 구분 기호는 입니다 NUL
.
예:
-t ''
또는-t '\0'
, 또는-t '\\\\\0'
또는-t '\\0whatever
NUL 문자로 구분-t '\t'
,-t '\\\t'
경계t
-t '\'
,-t '\\\\\'
백슬래시로 구분됩니다.
그럼에도 불구하고 구분 기호는 하나만 사용할 수 있습니다.바이트, 이 신비한 추가 처리가 -t '\0'
GNU와의 호환성을 위해 NUL 구분 기호를 지정하는 데 사용될 수도 있습니다 sort
(FreeBSD sort
는 GNU였습니다 sort
).그 약속이는 options 와도 관련이 없으므로 -t
구분 기호를 -t '\\'
지정하는 데에도 사용할 수 있습니다 (GNU에서 허용하는 것이 아님 ).\
sort
따라서 멀티바이트 문자를 구분 기호로 사용할 수 없습니다.
멀티바이트 문자를 허용하는 구현 은 많지 않습니다 sort
. GNU나 busybox도 sort
마찬가지입니다 . 그러나 ast-open은 sort
.
여기서는 ±
정렬하기 전에 단일 바이트 문자(가급적이면 정렬에 영향을 주지 않도록 입력에 표시되지 않는 문자)로 교체하고 나중에 복원할 수 있습니다. 고맙게도 FreeBSD tr
와 아마도 macOS tr
도 멀티바이트 문자(GNU와 반대 tr
)를 지원합니다.
<input tr '±\1' '\1±' | sort -t $'\1' ... | tr '±\1' '\1±'