1

Я хочу удалить все слова, заканчивающиеся на abc

Пример:

111abc 222def 333abc 444def 555abc 666def

Отсюда я хочу удалить все слова, оканчивающиеся на abc.

поэтому я попробовал это

: С / г // аЬс

Но это заменит только ABC

Как удалить все слова, заканчивающиеся на abc?

3 ответа3

6

Если все слова, которые вы хотите удалить, состоят из трех цифр, за которыми следует последовательность символов "abc", вы можете воспользоваться предложением @ m4673r. Для более общего подхода я бы предложил это вместо этого:

:s/\<\S*abc\>//g

Это удалит любое слово (независимо от символов / длины), которое заканчивается последовательностью символов "abc" (111abc а также FOOBARabc или просто abc).

4

Если вы хотите удалить все слово, и если ваш образец завершен, то вы хотите использовать это регулярное выражение:

:s/[0-9]\{3\}abc//g

Он удаляет каждый бит, состоящий из 3 цифр, за которыми следует abc .

1

Ответ Ансгара совершенно прав.
Я объясню его части, чтобы сделать его методологией, а не рецептом, потому что я думаю, что регулярные выражения как-то загадочны.

:s/\<\S*abc\>//g

команда подстановки vim
Это означает, что «в текущей строке (используйте% s для всех строк) подставьте совпадения регулярного выражения \<\S*abc\> (разделенные первыми двумя символами"/"текстом, содержащимся между двумя последними"/с, то есть ничего. Окончание "g" для глобального и означает заменить все совпадения вместо только первого.

Регулярное выражение заключено в экранированные угловые скобки \< и \> . Это границы слов , что означает, что регулярное выражение будет соответствовать тексту только внутри отдельных слов. Подумайте, что vim разделит текст на слова, прежде чем пытаться сопоставить каждый.
Экранированная заглавная буква S предназначена для невидимого пространства. \s (строчные буквы) соответствует пробелам (пробелы и табуляции), а \S (прописные) соответствует всем остальным.
Следовательно, \S* означает «непробельные символы ноль или более раз».
Часть abc просто соответствует этой точной последовательности символов.

Собирая все вместе, регулярное выражение сопоставляет целые слова, состоящие из любой последовательности символов, за которыми следует abc , как и хотел max .

Из-за того, как vim думает о словах, любая последовательность символов не будет содержать пробелов и других символов, которые являются границами слов. Список других символов зависит от типа редактируемого файла, и его можно увидеть, набрав :set iskeyword enter. Это информация, используемая для разделения текста на слова.

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