3

У меня есть ряд файлов с записями (пространства имен в исходном коде), как

FW.WGS.Web.HHH.Controls, 
FW.WGS.Web.HHH.Email,  
FW.WGS.Web.HHH.Account, etc    

а некоторые с записями

FW.WGS.Web.Controls, 
FW.WGS.Web.Email,      
FW.WGS.Web.Account, etc

Используя sed (или какой-либо другой инструмент linux/unix), я хочу изменить все FW.WGS.Web.Управление / Электронная почта / Учетная запись / и т.д. Для FW.WGS.Web.HHH.Control / Email / Account / и т.д..

Моя текущая команда sed соответствует s/WGS.Web/WGS.Web.\HHH/g 'не подходит - я получаю записи типа

FW.WGS.Web.HHH.HHH.Email

Поэтому мне нужно предотвратить совпадение строк, в которых уже есть "HHH".

2 ответа2

8

В sed вы можете использовать /pattern/!s/pattern/ , например

/HHH/!s/WGS\.Web/WGS\.Web\.HHH/g
1
perl -pe 's/WGS\.Web(?!\.HHH)/$&.HHH/g'

(где $& является ярлыком для сопоставленного текста)

Смотрите perlre.

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