2016-12-28 5 views
0

Мне нужно изменить IP-адрес, используя sed в файле suricata.yaml infront HOME_NET.Используя sed change IP Address, что бы он ни находился в скобках и цитатах, как в Suricata.yaml

HOME_NET: "[172.20.16.25]" 

Я могу управлять любым IP-адресом, используя следующее регулярное выражение.

sed -i "s/[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}/"$IP"/g" 

Проблема в том, что он изменит все IP-адреса в файле. Мне просто интересно, что перед HOME_NET.

ответ

1

sed -i "/^ *HOME_NET/s/[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}/"$IP"/g"

Выработать немного: одна строка SED сценария состоит из правила согласования линии (так называемый адрес в документации) и действия для выполнения (команды). Часть /^ *HOME_NET/ является простым правилом сопоставления строк, а часть s/../../g - это команда подстановки. Если вы не укажете правило сопоставления строк, все строки будут сопоставлены.

Попробуйте man sed, чтобы узнать больше.

+0

Спасибо за ваш ответ. Он работает нормально, если HOME_NET находится в начале строки, но что, если там было неизвестное количество пробелов до HOME_NET, как в файле suricata.yaml. – Goforseeking

+0

Я редактировал регулярное выражение. Вы должны добавить '*' ('') после строки, начинающей якорь '^' для учета ведущих пробелов. – Robin479