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.