Regex поиск и замена в VI - PullRequest
       23

Regex поиск и замена в VI

3 голосов
/ 02 февраля 2010

У меня есть документ с большим количеством ..... . Я хотел бы удалить все это. Использование vi, когда я печатаю

:%s/\<swf[^\/swf>]+\/swf\>//g

Я надеялся, что это сработает, но ничего не подходит.

Ответы [ 2 ]

8 голосов
/ 02 февраля 2010

Вы можете удалить все из буфера с помощью этой команды:

:%s!<swf.\{-}/swf>!!

если у вас также есть теги, которые могут быть разделены на две строки, вы можете добавить модификатор \_, чтобы . также соответствовал символам новой строки:

:%s!<swf\_.\{-}/swf>!!

при условии, что вы хотите удалить и теги, и их содержимое, если вы просто хотите избавиться от тегов и сохранить содержимое

:%s!</\?swf.\{-}>!!

Примечания:

  • вам не нужно бежать < или >
  • вы можете выбрать любой разделитель шаблона, какой пожелаете: Vim будет использовать первый символ, который вы положите после s в команде замены: это устраняет необходимость экранирования косой черты в вашем шаблоне

РЕДАКТИРОВАТЬ: расширение моего ответа после вашего комментария

  • это точно так же, как / STRING / REPLACE / g. Я использовал только ! вместо /, чтобы мне не пришлось указывать обратную косую черту в шаблоне (см. Мой второй пункт выше)
  • Я не добавил модификатор g в конце, так как у меня :set gdefault в моем .vimrc с тех пор навсегда (это означает, что по умолчанию Vim заменяет все совпадения в строке вместо только первого, таким образом возвращая значение /g)
  • \{-} является «несмешной» версией квантификатора *, то есть он соответствует 0 или более предшествующего атома, но принимает как можно меньше - это поможет вам убедиться, что ваш шаблон поиска будет распространяться на первый «закрывающий тег» вместо последнего.

НТН

3 голосов
/ 02 февраля 2010

Проблема в том, что [] является классом символов, поэтому вы говорите ему, что между открывающим и закрывающим тегами swf буквы s, w и f не могут нигде появляться, заказ.

Вместо этого вы можете попробовать не жадный матч:

\<swf.\{-}\/swf\>

Обратите внимание, что . не разрешает перевод строки по умолчанию.

Я не использую Vim, поэтому я использовал это руководство , чтобы узнать синтаксис. Я надеюсь, что это правильно.

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