문자 정렬 순서를 사용자 정의하는 방법은 무엇입니까?

문자 정렬 순서를 사용자 정의하는 방법은 무엇입니까?

Linux에서 문자 순서/문자 우선순위를 설정하는 방법은 무엇입니까?

현재 다음과 같이 명령을 사용하여 이를 테스트하고 있습니다.

ls -al --group-directories-first

다음과 같은 파일이 있다고 가정해 보겠습니다.

a
b
c
A
B
C
.a
.b
.c
.A
.B
.C

ls의 기본 출력은 다음과 같습니다.

-rw-r--r--  1 username  username     0 Jan 11 07:18 a
-rw-r--r--  1 username  username     0 Jan 11 07:55 .a
-rw-r--r--  1 username  username     0 Jan 11 07:18 A
-rw-r--r--  1 username  username     0 Jan 11 07:55 .A
-rw-r--r--  1 username  username     0 Jan 11 07:18 b
-rw-r--r--  1 username  username     0 Jan 11 07:55 .b
-rw-r--r--  1 username  username     0 Jan 11 07:18 B
-rw-r--r--  1 username  username     0 Jan 11 07:55 .B
-rw-r--r--  1 username  username     0 Jan 11 07:18 c
-rw-r--r--  1 username  username     0 Jan 11 07:55 .c
-rw-r--r--  1 username  username     0 Jan 11 07:18 C
-rw-r--r--  1 username  username     0 Jan 11 07:55 .C

내가 원하는 출력 순서:

-rw-r--r--  1 username  username     0 Jan 11 07:55 .A
-rw-r--r--  1 username  username     0 Jan 11 07:55 .a
-rw-r--r--  1 username  username     0 Jan 11 07:55 .B
-rw-r--r--  1 username  username     0 Jan 11 07:55 .b
-rw-r--r--  1 username  username     0 Jan 11 07:55 .C
-rw-r--r--  1 username  username     0 Jan 11 07:55 .c
-rw-r--r--  1 username  username     0 Jan 11 07:18 A
-rw-r--r--  1 username  username     0 Jan 11 07:18 a
-rw-r--r--  1 username  username     0 Jan 11 07:18 B
-rw-r--r--  1 username  username     0 Jan 11 07:18 b
-rw-r--r--  1 username  username     0 Jan 11 07:18 C
-rw-r--r--  1 username  username     0 Jan 11 07:18 c

내가 시도한 것들 .bashrc:

export LC_ALL="C"               #Did not work
export LC_COLLATE="en_US.UTF-8" #Did not work
export LC_LANG="C"              #Did not work
export LC_COLLATE="C"           #Did not work

그렇다면 나만의 맞춤 문자 순서/우선순위를 어떻게 만들 수 있나요?

감사해요

답변1

sort이 명령이 도움이 될 것 같습니다 .

-t, --field-separator=SEP

공백이 아닌 공백을 공백으로 변환하는 대신 SEP를 사용하세요.

-k, --key=POS1[,POS2]

POS1(시작점 1)에서 키를 시작하고 POS2(기본 줄 끝)에서 끝납니다.

ls -lAr|sort -t . -k2
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:35 a
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:35 b
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 c
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 d
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:38 A
-rw-r--r-- 1 CRM CCRM 0 Jan 20 10:34 .a
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 .A
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:38 .b
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 .B
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 .C
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 .D

답변2

km_KH 로케일은 먼저 소문자를 사용하고 그 다음에는 대문자를 사용하기는 하지만 요청한 것과 비슷하게 정렬됩니다. km_KH 로캘은 Centos 7의 표준 설치에 포함되어 있습니다. 따라서 아마도 저장소의 추가 패키지를 통해 다른 배포판에서 사용할 수 있을 것이라는 합리적인 추측입니다.

이 별칭 정의를 .bashrc에 넣을 수 있습니다.

 $ alias l='LC_COLLATE=km_KH ls -lA'
 $ touch a b c A B C .a .b .c .A .B .C
 $ l
total 0
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .a
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .A
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .b
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .B
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .c
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .C
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 a
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 A
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 b
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 B
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 c
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 C

도트 파일이 마지막에 오더라도 ar_SA 로케일은 요청한 정렬에 가깝게 정렬됩니다.

-rw-rw-r-- 1 g greg 0 Nov  8 18:33 A
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 a
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 B
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 b
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 C
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 c
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .A
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .a
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .B
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .b
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .C
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .c

다음은 설치된 각 로캘이 현재 디렉터리를 정렬하는 방법을 확인하는 간단한 루프입니다.

for a in $(locale -a);do echo $a;LC_COLLATE=$a ls -Al;done|&less

또는 다음과 같은 실용적인 팁을 사용할 수 있습니다. 사용자 정의 패턴을 사용하여 정렬

여기에 대한 답변 정렬 및 결합은 흥미로웠습니다. http://superuser.com/questions/489275/how-to-do-custom-sorting-using-unix-sort

또는 총알을 물고 자신의 로케일을 정의할 수 있습니다.http://askubuntu.com/questions/653008/how-to-create-a-new-system-locale

관련 정보