Как использовать команду «Заменить», чтобы изменить что-то в середине шаблона? - PullRequest
1 голос
/ 02 апреля 2012

Мой случай таков:

У меня есть набор функций и объявлений типа myStuffDoSomething, которые я хочу переименовать в myStuff_DoSomething, где DoSomething может быть любым словом.И есть вероятность, что некоторые из них уже написаны так.

Я мог бы использовать s/myStuff[^_]/&_/g, но это закончится тем, что myStuffD_oSomething поставит подчеркивание в неправильном месте.

ПРИМЕЧАНИЕ. Я добавил sed в теги, поскольку синтаксис команды-заменителя аналогичен sed (если не совпадает).

Ответы [ 3 ]

4 голосов
/ 02 апреля 2012

Если имя уже содержит _, вы можете просто использовать s/myStuff\zs_\?/_/g, если префикс всегда myStuff.Таким образом, существующий _ не будет удвоен, но будет вставлен несуществующий.

РЕДАКТИРОВАТЬ: Используется токен \zs для удаления дублирования, как указано Рэнди Моррис в комментариях.

2 голосов
/ 02 апреля 2012

Вот что я бы сделал:

%s/\(myStuff\)_*/\1_
2 голосов
/ 02 апреля 2012

Это может работать для вас:

echo myStuffDoSomething | sed 's/\(myStuff\)\([^_]\)/\1_\2/'
myStuff_DoSomething
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...