Você estava muito perto!
Você pode adicionar um intervalo de endereços para a parte que deve ser alterada. Se você quiser deixar tudo intocado fora do bloco da linha [b]
para a próxima linha começando com [
, escolha um intervalo de endereços com uma vírgula entre as duas expressões (agora você tem apenas o bloco a ser alterado), inverta-o com !
(agora você tem todo o resto) e use o comando b
para ramificar até o final do script. Portanto, todos os comandos a seguir afetarão apenas as linhas dentro do intervalo:
sed -i '/^\[b\]$/,/^\[/!b
/PATH/c\PATH=\/u01
/LOC_NAME/c\LOC_NAME=RUS'
É claro que, em vez de inverter e ramificar, você pode usar um bloco {commands;...;}
para a correspondência não invertida, mas acho que isso é menos legível.
Se você quiser usar uma palavra dentro de uma variável como identificador, você pode fazer assim:
ID=foo
sed -i '/^\['$ID'\]$/,/^\[/!b
/PATH/c\PATH=\/u01
/LOC_NAME/c\LOC_NAME=RUS'