Я пытаюсь заменить одну последовательность символов другой в файле с vim. У меня есть это в файле: aname; 1234 anothername; 1456 again; 1478 againBis; 10253 items; 10547 thingsBis; 12457 etc ...

И я хотел бы заменить последовательность «; 1» в каждой строке, где номер состоит из 4 символов, на последовательность «; 01», чтобы число составляло 5 символов.

Я пробовал в vi:

:1,$s:;1...:;01...:g

Но в результате подстановки получится: aname; 01 ... другое имя; 01 ... again; 01 ... againBis; 10253 вещи; 10547 thingsBis; 12457 и т. д.

Удаляет символы после "1" ... Кто-нибудь может помочь ??? Tahnks

vi
0
Flopi 20 Мар 2013 в 16:13

1 ответ

Лучший ответ

Следующая команда должна делать то, что вы хотите:

ОБНОВЛЕНИЕ:

:1,$s:;\(1[0-9]\{3\}$\):;0\1:g

1
swpd 22 Мар 2013 в 12:32
Спасибо за ваш ответ, но vim отвечает: «Шаблон не найден; (1 [0-9] \ {3 \})», поэтому я пробовал без «(» и «)», и это привело к очень плохой замене. Любая другая идея ??
 – 
Flopi
20 Мар 2013 в 20:14
Вам следует добавить обратную косую черту ('\') перед ( и ). эта пара круглых скобок используется для обратной ссылки.
 – 
swpd
21 Мар 2013 в 06:24
Я попытался использовать обратную косую черту, как вы написали, но затем у меня появилось сообщение «Шаблон не найден ...» Вот почему я попытался без «'(», что тоже не работает.
 – 
Flopi
21 Мар 2013 в 15:16
"шаблон не найден" означает, что этот шаблон не соответствует какому-либо тексту в вашем файле. Не могли бы вы рассказать мне больше о макете и содержании вашего файла?
 – 
swpd
21 Мар 2013 в 15:46
Мой файл - это простой текстовый файл, но он содержит около 36000 строк с такими данными: aname;1234 anothername;1456 again;1478 againBis;10253 things;10547 thingsBis;12457
 – 
Flopi
21 Мар 2013 в 19:38