首先排序点字符

时间:2016-01-11 15:50:05

标签: bash sorting

我想使用sort对文件名列表进行排序。 例如:

file.ext
file1.ext
z_file2.ext

使用sort,我得到了

file1.ext
file.ext
z_file2.ext

如何在 fileXXXX之前对文件。进行排序。

3 个答案:

答案 0 :(得分:3)

正如评论中所建议的,您的问题是您的语言环境会产生奇怪的排序顺序。将区域设置设置为C以进行排序可以解决问题:

LC_ALL=C sort

要获得更精确的修复,假设您要使用区域设置感知归类顺序但仍然在扩展名中分隔排序键,请将.指定为字段分隔符并使用两个排序键:

sort -t. -k1,1 -k2

答案 1 :(得分:0)

您可以使用-d选项

从联系手册:

  

-d, --dictionary-order consider only blanks and alphanumeric characters

$ cat toto
file.ext
file1.ext
z_file2.ext

$ sort -d toto
file1.ext
file.ext
z_file2.ext

答案 2 :(得分:0)

您必须将文件名与数字分开,相应地对它们进行排序并合并回来

$ sed -r 's/([0-9]*)\./ &/' file | sort -k1,1 -k2n | sed 's/ //'
file.ext
file1.ext
z_file2.ext
z_file11.ext