Используя VI, как я могу выполнить поиск и заменить следующую инструкцию?
Вопрос
Мне нужно заменить следующее:
CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`
Для
CREATE TABLE IF NOT EXISTS `access`
Я пытался
:%s/\/\*\!\d+(.*)\*\//\1/g
Но, похоже, этого не произошло.Что я делаю не так?
Решение
vim требует обратной косой черты + (или используйте * вместо этого).Кроме того, вам необходимо использовать группирующую скобку с обратной косой чертой в vim.Таким образом:
:%s/\/\*\!\d\+\(.*\)\*\//\1/g
Да, регулярные выражения posix в старом стиле vim - отстой :/
Редактировать:Как упоминалось в комментариях ниже, + работает, если экранировано как \+ .И \ d на самом деле поддерживается, упс.Отредактировал пример регулярного выражения, чтобы исправить это.Также смотрите Пример Брайана Карпера для получения более краткой и читаемой версии.
Другие советы
Используйте "very magic" и используйте разделители, отличные от используемых по умолчанию, чтобы упростить чтение (и запоминание).
:%s@\v/\*!\d+(.*)\*/@\1@g
Без "very magic" вам придется поставить обратную косую черту перед +
и ()
(но не перед *
или какие-то другие вещи).Это не очень последовательно.
Немного отличается и более эффективен с [^*]+ :-)
1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1