2013-07-12 5 views
2

Предположим, что у меня есть список в текстовый файл, который выглядит следующим образом -буквенно-цифровой сортировки в VIM

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, это дает мне выход, как -

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.

ответ

4
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 

и вам не нужны %, своего рода сортирует все строки, если диапазон не был дан.

EDIT

, как прокомментировал ОП, если у вас есть:

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 
+0

ах да, то, что я пытался было, как этот '% своего рода -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

+0

@Raj PLS изменить свой вопрос. но в следующий раз попробуйте сделать этот пример более подходящим для ваших реальных данных. это поможет вам быстрее получить решение и сэкономить усилия людей, которые будут помогать. – Kent

+0

@Raj см. Редактирование в ответ. – Kent