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; }

公众号