Se você tem o GNU awk em seu sistema, você pode usar o seguinte script. Ele anexa a string logo antes do início da próxima seção.
awk -v RS='\[[^]]*\]' '{printf $0; if(oRT~/Unit/){print "---MY LINE---"}; printf RT; oRT=RT}' input_file
RS é o separador de registros. É um regex definido para qualquer coisa entre colchetes, de modo que corresponda a [Unit] e [Service] . Ter esse RS permite ter um registro com o conteúdo completo de uma seção de bloco.
RT é o terminador de registro. É definido dinamicamente por awk para cada registro com base em RS . Ele irá armazenar [Unit] e [Service] .
O truque é armazenar o terminador de registro na variável oRT . Se este tiver a palavra Unit , anexe a string desejada ---MY LINE--- .
Se você quiser acrescentar a string antes da linha vazia no final da seção, use o seguinte script:
awk -v RS='\[[^]]*\]' 'oRT~/Unit/{sub(/\n$/,"---MY LINE---\n\n")}{printf $0 RT; oRT=RT}' input_file
A função sub substitui a linha vazia no final do registro, acrescentando a string desejada e uma linha vazia.