1 (11.01.2014 00:10:08 отредактировано Парфён)

Доброго времени суток.
Мне бы хотелось получить ответ на следующий вопрос :

Допустим , мы набрали какой-то текст в vi.Одна из строчек выглядит следующим образом:

Var1,Var2,Var3

Как можно заменить Var1 и Var3(!не заменив Var2!) на Const1 и Const3 одной коммандой?
Лично я предполагаю,что следующей коммандой ":%s/Var/Const/gc" -  мы можем вручную контролировать,что мы заменяем,а что нет.
Проблема тут в том, что я уверен,что преподаватель(да,это одно из заданий для лабы,я бы иначе так не заморачивался)прицепится,поскольку мы выполняем несколько действий для решения одной задачи.

Если кто может предложить иной способ сделать это одной командой,был бы рад узнать как именно.Спасибо.

2 (10.01.2014 23:51:00 отредактировано moshell)

:%s/Var\([13]\)/Const\1/g

учите регэкспы. они почти везде одинаковы.

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

3

moshell пишет:

:%s/Var\([13]\)/Const\1/g

Да,подошло.Спасибо большое!Я уже устал гуглить вконец.

В принципе тему можно закрывать,но мне всё-таки любопытно:

Если я правильно понимаю "\" отменяет работу следующего за ним командного символа...Разве не будет(понятно,что на самом деле не будет  ab  ) аналогична эта запись Var[13]? И мне интересно,что стоит в данном случае за конструкцией "\1".Мне это в принципе не особо нужно,а так, для себя.

4

круглые скобки () просто группируют какое то выражение которое нужно сохранить "в уме"
1 - это ссылка на сохраненное в первой паре скобок.
если бы было  () () () то и ссылки были бы 1 2 3
ну бэкслеш это для верной интерпретации

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

5

Хорошо,я понял.Тему можно закрывать.Ещё раз спасибо!