САС Заменить Линии соответствия, но не, если это закомментировано

Мой текст содержит такую ​​строку:

DHCPD_INTERFACE="eth4"

Есть другие строки, содержащие #DHCPD_INTERFACE=

Я хочу заменить всю линию DHCPD_INTERFACE="eth4" соответствие на DHCPD_INTERFACE= но не если строка содержит #

Я пробовал:sed -i.bak '/^#/!s/DHCPD_INTERFACE=/DHCPD_INTERFACE="eth2"/g' dhcpd

Но это не заменяет всю линию.

это DHCPD_INTERFACE="eth4" должно быть обновлено до DHCPD_INTERFACE="eth2" но нет строки, содержащей # а также DHCPD_INTERFACE= должно быть изменено

Как я могу это сделать..? Спасибо

3 ответа

Вы можете использовать якорь (^) чтобы соответствовать началу строки:

sed 's/^\(DHCPD_INTERFACE="eth\)4"/\12"/' file

Вы можете сначала заменить строки на "#", затем заменить строки на "eth4" и, наконец, вернуть те, что на "#".

    sed -i.bak s/#DHCPD_INTERFACE=/foo/g dhcpd
    sed -i s/DHCPD_INTERFACE="eth4"/DHCPD_INTERFACE="eth2"/g dhcpd
    sed -i s/foo/#DHCPD_INTERFACE=/g dhcpd

Не лучшее решение, но все еще рабочее. Надеюсь, я помог!

SED решение:

Образцовый test содержимое файла:

DHCPD_INTERFACE="eth4"
#DHCPD_INTERFACE="eth4"

sed 's/\([^#]\|^\)DHCPD_INTERFACE="eth4"/\1DHCPD_INTERFACE="eth2"/g' test

Выход:

DHCPD_INTERFACE="eth2"
#DHCPD_INTERFACE="eth4"
Другие вопросы по тегам