Bash,根据带有数字和字符串的文件名列出文件

我正试图根据文件名对文件进行排序
先按数字排序,然后按字母排序。
数字是年龄,所以成年人是最后一个。
如果使用相同的数字,请根据rep1、rep2和rep 3进行排序
原始文件是这样的

abc.0.5
abc.1.2
abc.15.3
abc.2.3
abc.35.5dpp
abc.35.5dpp.rep2
abc.7.3
abc.adult
abc.adult.rep2
abc.adult.rep3

结果应该是
abc.0.5
abc.1.2
abc.2.3
abc.7.3
abc.15.3
abc.35.5dpp
abc.35.5dpp.rep2
abc.adult
abc.adult.rep2
abc.adult.rep3

我试过了
ls -v a*| sed 's/\.adult\./.99./' | sort -V | sed 's/\.99\./.adult./'

但如果有民进党或代表在数字和成人之后,它就不会正确排序。


最佳答案:

如果要强制adult成为最后一个,只需执行两个单独的批处理,一个包含该字符串的文件名,另一个不包含该字符串的文件名,将其移到最后即可。即:

shopt -s extglob nullglob
print_lines() { (( $# )) && printf '%s\n' "$@"; }

{ print_lines abc!(*adult*) | sort -V; print_lines abc*adult* | sort -V; }