Как удалить все, кроме определенного шаблона в Vim? - PullRequest
1 голос
/ 12 октября 2011

У меня есть XML-файл, в котором меня интересует только атрибут размера определенного элемента.Сначала я использовал

global!/<proto name="geninfo"/d

, чтобы удалить все строки, которые меня не интересуют.Это оставляет мне целую кучу строк, которые выглядят так:

<proto name="geninfo" pos="0" showname="General information" size="174">

Я хочу удалить все, кроме значения для "размера".Мой план состоял в том, чтобы использовать замену, чтобы избавиться от всего, что не соответствует 'size = "[digit]"', удалить строку 'size' и кавычки, но я не могу понять, как заменить отрицание строки.

Есть идеи, как это сделать, или идеи, как сделать это лучше?По сути, я хочу получить файл с одним номером (размером) в строке.

Ответы [ 2 ]

6 голосов
/ 12 октября 2011

Вы можете использовать соответствующие группы:

:%s/^.*size="\([0-9]*\)".*$/\1/

Это заменит строки, содержащие size="N", на N и не коснется других строк.

Пояснение: здесь будет искать строку, содержащую несколько случайных символов, затем где-то цепочку size=", затем цифры, затем ", затем еще несколько случайных символов, затем конец строки. Теперь я заключил цифры в (экранированные) скобки. Это создает группу. Во второй части команды поиска и замены я, по сути, говорю: «Я хочу заменить всю строку только содержимым этой первой группы» (именуемой \1).

2 голосов
/ 12 октября 2011
:v:size="\d\+":d|%s:.*size="\([^"]\+\)".*:\1:

Первая команда (пока | не удалит каждую строку, которая не соответствует шаблону size="<SOMEDIGIT(S)>", вторая (%s... удалит все до и после размера attr "" также будут удалены ).

HTH

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