найти и заменить слово другим - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть файл, который содержит слово "Isl".(для острова) или слово "острова".(для островов), и я хочу заменить их на «ОСТРОВ» и «ОСТРОВА» соответственно во всех строках.

Я использую этот :%s/\<Isl.\>/ISLAND/g вместо «Исл».но по какой-то причине эта команда не находит «Isl.», но «Isls» (да, без точки)

Почему это не работает так, как задумано?

1 Ответ

0 голосов
/ 01 декабря 2018

Полагаю, вы используете редактор vi.Требуемая вами команда - :%s/\<Isl\./ISLAND/g, чтобы заменить Isl.ОСТРОВ.Затем :%s/\<Isls\./ISLANDS/g, чтобы заменить Isls.на острова.Вы можете использовать :help regex для получения дополнительной информации.

Причины, по которым другие совпадения не работали, состоят в том, что \< и \> соответствуют началу и концу слов.Для ASCII, символы слова [a-zA-Z0-9_].Точка не может быть частью слова, поэтому она никогда ничего не будет соответствовать, если вы сделаете :%s/\<Isl\.\>/ISLAND/g.Также ':%s/Isl./ISLAND/g' означает совпадение 4-буквенной последовательности, начинающейся с Isl, поэтому она будет соответствовать Isla, Islb или Islc и так далее.

\<Isl.\> не делает то, что вы хотите.. означает любой символ, а \> означает конец слова.Таким образом, он будет соответствовать только 4 буквенным словам, которые начинаются с Isl.

...