САС Заменить Линии соответствия, но не, если это закомментировано
Мой текст содержит такую строку:
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"