이름의 일부 정렬

이름의 일부 정렬

동일한 접두어를 가진 이름이 여러 개 있는데 접두어를 알 수 없습니다.

이름에 있는 숫자로 정렬하고 싶습니다.

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)

여기서 nglob 한정자는 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 --

관련 정보