我有多个具有相同前缀的名称,但前缀未知。
我只想按名称中的数字排序。
IE
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 扩展,并o+function
根据$REPLY
的输出(通过 )进行排序function
。
print -rC1
在olumn上打印其参数r
aw 。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 --