【问题标题】:alphanumeric sort in VIMVIM中的字母数字排序
【发布时间】:2013-07-12 08:53:08
【问题描述】:

假设我在一个文本文件中有一个列表,如下所示 -

TaskB_115
TaskB_19
TaskB_105
TaskB_13
TaskB_10
TaskB_0_A_1
TaskB_17
TaskB_114
TaskB_110
TaskB_0_A_5
TaskB_16
TaskB_12
TaskB_113
TaskB_15
TaskB_103
TaskB_2
TaskB_18
TaskB_106
TaskB_11
TaskB_14
TaskB_104
TaskB_112
TaskB_107
TaskB_0_A_4
TaskB_102
TaskB_100
TaskB_109
TaskB_101
TaskB_0_A_2
TaskB_0_A_3
TaskB_116
TaskB_1_A_0
TaskB_111
TaskB_108

如果我使用命令%sort 在 vi​​m 中排序,它会输出 -

TaskB_0_A_1
TaskB_0_A_2
TaskB_0_A_3
TaskB_0_A_4
TaskB_0_A_5
TaskB_10
TaskB_100
TaskB_101
TaskB_102
TaskB_103
TaskB_104
TaskB_105
TaskB_106
TaskB_107
TaskB_108
TaskB_109
TaskB_11
TaskB_110
TaskB_111
TaskB_112
TaskB_113
TaskB_114
TaskB_115
TaskB_116
TaskB_12
TaskB_13
TaskB_14
TaskB_15
TaskB_16
TaskB_17
TaskB_18
TaskB_19
TaskB_1_A_0
TaskB_2

但我希望输出如下 -

TaskB_0_A_1
TaskB_0_A_2
TaskB_0_A_3
TaskB_0_A_4
TaskB_0_A_5
TaskB_1_A_0
TaskB_2
TaskB_10
TaskB_11
TaskB_12
TaskB_13
TaskB_14
TaskB_15
TaskB_16
TaskB_17
TaskB_18
TaskB_19
TaskB_100
TaskB_101
TaskB_102
TaskB_103
TaskB_104
TaskB_105
TaskB_106
TaskB_107
TaskB_108
TaskB_109
TaskB_110
TaskB_111
TaskB_112
TaskB_113
TaskB_114
TaskB_115
TaskB_116

注意我只是写了这个列表来演示这个问题。我可以在 VIM 中生成列表。但我也想在 VIM 中做其他事情。

【问题讨论】:

    标签: sorting vim alphanumeric


    【解决方案1】:
    With [n] sorting is done on the first decimal number
                in the line (after or inside a {pattern} match).
                One leading '-' is included in the number.
    

    试试这个命令:

    sor n
    

    并且您不需要%,如果没有给出范围,sort 会对所有行进行排序。

    编辑

    如 OP 所述,如果您有:

    TaskB_0_A_1
    TaskB_0_A_2
    TaskB_0_A_4
    TaskB_0_A_3
    TaskB_0_A_5
    TaskB_1_A_0
    

    你可以试试:

    sor n /.*_\ze\d*/
    

    sor nr /\d*$/
    

    EDIT2

    对于新编辑的问题,此行可能会根据您的示例数据为您提供预期的输出:

    sor nr /\d*$/|sor n
    

    【讨论】:

    • 哦,是的,我尝试的是这样的%!sort -n。我也可以编辑我的问题。假设我的列表为 - TaskB_0_A_1 TaskB_0_A_2 TaskB_0_A_4 TaskB_0_A_3 TaskB_0_A_5 TaskB_1_A_0 然后进行排序,它不起作用。你能告诉我,如何实现这个排序,因为sort n 只对第一个十进制数字进行排序。
    • @Raj 请编辑您的问题。但下次尝试使示例更适合您的真实数据。这可以帮助您更快地获得解决方案,也可以节省提供帮助的人的工作量。
    猜你喜欢
    • 2017-06-05
    • 2015-06-22
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    相关资源
    最近更新 更多