#vim
#vim
Вопрос:
У меня есть XML-файл, в котором меня интересует только атрибут size определенного элемента. Сначала я использовал
global!/<proto name="geninfo"/d
чтобы удалить все строки, которые меня не волнуют. Это оставляет мне целую кучу строк, которые выглядят так:
<proto name="geninfo" pos="0" showname="General information" size="174">
Я хочу удалить все, кроме значения «size».
Мой план состоял в том, чтобы использовать substitute, чтобы избавиться от всего, что не соответствует ‘size=»[digit]»‘, удалить строку ‘size’ и кавычки, но я не могу понять, как заменить отрицание строки.
Есть идеи, как это сделать, или идеи о лучшем способе достижения этой цели? В принципе, я хочу получить файл с одним номером (размером) на строку.
Ответ №1:
Вы можете использовать соответствующие группы:
:%s/^.*size="([0-9]*)".*$/1/
Это заменит строки, которые содержат size="N"
только N
и не касаются других строк.
Объяснение: это будет искать строку, содержащую несколько случайных символов, затем где-то цепочку size="
, затем цифры, затем "
, затем еще несколько случайных символов, затем конец строки. Теперь, что я сделал, так это то, что я заключил цифры в (экранированные) круглые скобки. Это создает группу. Во второй части команды поиска и замены я, по сути, говорю: «Я хочу заменить всю строку только содержимым этой первой группы» (называемой 1
).
Ответ №2:
:v:size="d ":d|%s:.*size="([^"] )".*:1:
Первая команда (до тех |
пор, пока не будет удалена каждая строка, которая не соответствует size="<SOMEDIGIT(S)>"
шаблону, вторая ( %s...
удаляет все до и после изменения размера "
(и "
также будет удалена).
HTH