Как определить диапазон и отсортировать по номеру в Vim с помощью регулярных выражений? - PullRequest
2 голосов
/ 17 августа 2010

Этот пост состоит из двух частей.Я пытаюсь отсортировать набор IP-операторов, которые выглядят так:

ifconfig em0 alias 172.16.80.1/28
ifconfig em0 alias 172.16.180.1/32
...
ifconfig em0 alias 172.16.1.1/32

по ip.Можно ли вернуть диапазон с помощью регулярного выражения?Следующее возвращает ошибку

%/172.*/sort n

, и это (по-видимому) ничего не делает:

g/172.*/sort n

Может ли это быть сделано?

Теперь я решил проблему дальности напрямую:

18,31 sort

, но сортирует в ASCII-порядке, а не по численности (по ips).

ifconfig em0 alias 172.16.180.1/32
...
ifconfig em0 alias 172.16.80.1/28

ик сожалению, этот совет Vim совет не работает:

18,31 sort n

На самом деле он ничего не делает;сортировка по исходному списку оставляет исходный порядок без изменений.Таким образом, даже если невозможно вернуть диапазон с помощью регулярных выражений, как отсортировать эти строки численно?

ОБНОВЛЕНИЕ Работает следующее:

18,31 !sort -n -t . -k 3,3 -k 4,4

(мне нужно отсортировать только по двум последнимдва байта.)

1 Ответ

3 голосов
/ 17 августа 2010

Вы можете указать регулярное выражение для начальной строки и регулярное выражение для конечной строки диапазона. Если у вас был этот файл:

foo
bar
ifconfig em0 alias 172.16.80.1/28
ifconfig em0 alias 172.16.55.1/28
ifconfig em0 alias 172.16.180.1/28
ifconfig em0 alias 172.16.1.1/32
baz
quux

Вы можете отсортировать строки по IP-адресам следующим образом:

:/172/,/baz/-1sort

Здесь написано "начать с первой строки, которая соответствует /172/, заканчивать на одну строку выше первой строки, которая соответствует /baz/". Вы можете придумать более умное регулярное выражение в зависимости от содержимого вашего файла.

Я не знаю, как отсортировать IP-адреса в Vim за один проход. Но если у вас есть доступ к сортировке GNU, вы можете сделать это примерно так (согласно этой статье ):

:/172/,/baz/-1!sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4

Это отсортирует их численно. Не уверен, что вы подразумеваете под "лексикографически" в отношении IP-адресов.

Что касается :sort и :g, справка Vim в :h :sort говорит:

Обратите внимание, что использование ": sort" с ": global" не сортирует совпадающие строки, это совершенно бесполезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...