Как было предложено, есть более эффективные способы редактирования файлов INI ...
Тем не менее, вот один способ с sed
:
sed '/^\[.*\]/h
/http-proxy-exceptions/{x;/\[global\]/!{x;b;};x;c\
http-proxy-exceptions = *.otherdomain.org, *.otherdomain.com, 127.0.0.1, localhost
}
/http-proxy-host/{x;/\[global\]/!{x;b;};x;c\
http-proxy-host = proxy.otherdomain.com
}
/http-proxy-port/{x;/\[global\]/!{x;b;};x;c\
http-proxy-port = 9000
}' infile
Это перезаписывает буфер удержания содержимым пространства шаблона каждый раз, когда он встречает совпадение строки [. *]
(т.е. сохраняет имя каждого раздела в старом буфере h
). В каждой строке, соответствующей вашему шаблону http -. *
, он x
изменяет буферы - если пространство удержания соответствует , а не (!
) match [global]
, затем e x
возвращается назад и переходит к следующему циклу через b
. Если пространство удержания совпадает с [global]
, он e x
возвращается обратно, а c
изменяет содержимое пространства шаблонов.