代码之家  ›  专栏  ›  技术社区  ›  Denis Rouzaud

首先排序点字符

  •  0
  • Denis Rouzaud  · 技术社区  · 9 年前

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

    file.ext
    file1.ext
    z_file2.ext
    

    使用排序,我得到

    file1.ext
    file.ext
    z_file2.ext
    

    我怎么能这么做 文件 在之前排序 文件XXXX。 ?

    3 回复  |  直到 9 年前
        1
  •  3
  •   rici    9 年前

    正如评论中所建议的,您的问题是您的区域设置产生了一个奇怪的排序顺序。将区域设置设置为C进行排序应该可以解决此问题:

    LC_ALL=C sort
    

    为了更精确的修复,假设您希望使用区域设置感知排序规则,但仍在扩展名处分隔排序键,请指定 . 作为字段分隔符,并使用两个排序键:

    sort -t. -k1,1 -k2
    
        2
  •  0
  •   karakfa    9 年前

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

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

    您可以使用-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