Você pode criar uma função de shell como esta:
printSection()
{
section="$1"
found=false
while read line
do
[[ $found == false && "$line" != "[$section]" ]] && continue
[[ $found == true && "${line:0:1}" = '[' ]] && break
found=true
echo "$line"
done
}
Você pode usar printSection como um comando e passar a seção como um parâmetro como:
printSection APP2
Para obter seu parâmetro, você pode usar um sed mais simples agora, como:
printSection APP2 | sed -n 's/^name=//p'
Isto estará operando em stdin e escrevendo para stdout. Então, se o seu arquivo de configuração de exemplo foi chamado de /etc/application.conf, e você quisesse armazenar o nome de APP2 em uma variável app2name, você poderia escrever isto:
app2name=$(printSection APP2 | sed -n 's/^name//p/' < /etc/applications.conf)
Ou você poderia criar a parte do parâmetro na função e ignorar o sed por completo, assim:
printValue()
{
section="$1"
param="$2"
found=false
while read line
do
[[ $found == false && "$line" != "[$section]" ]] && continue
[[ $found == true && "${line:0:1}" = '[' ]] && break
found=true
[[ "${line%=*}" == "$param" ]] && { echo "${line#*=}"; break; }
done
}
Então você atribui seu var assim:
app2name=$(printValue APP2 name < /etc/applications.conf)