我正在尝试根据文件名对文件进行排序 首先根据数字排序,然后根据其字母进行排序。 数字是年龄,因此成年人将是最后一个。 如果使用相同的数字,则根据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./'
但是,如果数字和成人后面有dpp或rep,它将无法正确排序。
答案 0 :(得分:2)
如果您想强制adult
到最后,只需执行两个独立的批处理就将其移到末尾,一个是包含该字符串的文件名,另一个是不包含< / em>。那就是:
shopt -s extglob nullglob
print_lines() { (( $# )) && printf '%s\n' "$@"; }
{ print_lines abc!(*adult*) | sort -V; print_lines abc*adult* | sort -V; }
答案 1 :(得分:0)
我想你想要
ls -v a* | sed 's/\.adult\./.99./' | sort -t. -k2,2n -k3,3n | sed 's/\.99\./.adult./'
答案 2 :(得分:0)
这是工作
ls -l abc* | awk '{print $9}'| sed 's/\.adult/.99/' | sort -V | sed 's/\.99/.adult/'