Я могу сопоставить шаблон с регулярным выражением в vi , но когда я добавляю строку замены, vi думает, что это часть соответствия регулярному выражению. Это происходит несмотря на использование различных разделителей. Есть ли способ избежать этого? Например, следующая команда сопоставляет и удаляет желаемую строку (\a{b}[c]):

s:\\a{b}[c\]

Однако, если я добавлю строку замены,

s:\\a{b}[c\]:abc

Я получаю ошибку

E486: Pattern not found: \\a{b}[c\]:abc

Поэтому vi не распознает разделитель, который отделяет регулярное выражение запроса от строки замены. Это происходит с различными разделителями / разделителями. Как я могу убедиться, что vi правильно различает шаблон регулярного выражения и строку замены?

1 ответ1

4

Левая скобка ([) запускает коллекцию или набор символов, которые будут соответствовать любому из ее членов. Коллекция заканчивается правой скобкой (]), но вы удалили обратную косую черту правой скобки в вашем шаблоне, поэтому vi видит все справа от левой скобки как находящееся в коллекции.

Если вы хотите сопоставить буквальную левую скобку, вам придется избежать обратной косой черты. Если вместо этого вы намеревались создать коллекцию, содержащую c и a \ , вам нужно будет использовать обратную косую черту - \ . Другими словами, ваши команды замены должны выглядеть так:

s:\\a{b}\[c\]:abc

или вот так:

s:\\a{b}[c\\]:abc

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .