동일한 접두어를 가진 이름이 여러 개 있는데 접두어를 알 수 없습니다.
이름에 있는 숫자로 정렬하고 싶습니다.
즉
abcd_006-123
abcd_006-232
bbcd_w_006-112
그러니까 bbcd_w_006-112
그게 첫 번째여야 해
감사해요
답변1
를 사용하면 zsh
다음과 같은 전역 정렬 기능을 정의할 수 있습니다.
digitsOnly() REPLY=${REPLY//[^0-9]} # removes all non-digits
그런 다음 다음과 같이 사용하십시오.
print -rC1 -- *(no+digitsOnly)
여기서 n
glob 한정자는 numericglobsort
옵션을 해당 glob 확장으로 변환하고 출력(by)을 o+function
기준으로 $REPLY
정렬합니다 function
.
print -rC1
해당 매개변수 aw를 olumn에 인쇄합니다 r
.1
c
를 사용하면 ls
인쇄 ls
하기 전에 파일 목록이 기본적으로 알파벳순으로 정렬됩니다. GNU 구현에서는 ls
다음 옵션을 사용하여 정렬을 방지할 수 있습니다 -U
.
ls -ldU -- *(no+digitsOnly)
다음과 같이 할 수 있습니다 perl
:
perl -le 'sub digitsOnly {$_=shift; s/\D//gr};
print for sort {digitsOnly($a) <=> digitsOnly($b)} <*>'
또는 다음 파일 목록에 대해 명령을 실행하십시오.
perl -l0e 'sub digitsOnly {$_=shift; s/\D//gr};
print for sort {digitsOnly($a) <=> digitsOnly($b)} <*>' |
xargs -r0 ls -ldU --