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

问题描述 投票:0回答:3

我试图根据文件名排序文件,首先根据数字排序,然后根据它的字母排序。数字是年龄,所以成年人将是最后一个。如果使用相同的数字,则根据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,它将无法正确排序。

linux bash
3个回答
2
投票

如果你想迫使adult成为最后一个,只需通过做两个单独的批次(一个包含该字符串的文件名,另一批不包含该文件名的文件名)将其移动到最后。那是:

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

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

0
投票

我想你想要:

ls -v a* | sed 's/\.adult\./.99./' | sort -t. -k2,2n -k3,3n | sed 's/\.99\./.adult./'

0
投票

这个人做的工作

ls -l abc* | awk '{print $9}'| sed 's/\.adult/.99/' | sort -V  | sed 's/\.99/.adult/'
© www.soinside.com 2019 - 2024. All rights reserved.