Sed corresponde a linhas inteiras, mas não inclui a nova linha, portanto, uma linha em branco será apenas uma string vazia. Você pode usar ^ para corresponder ao início de uma linha e $ para corresponder ao final, então ^$ corresponde a uma linha em branco. Apenas substitua por % ghi\n% :
sed 's/^$/% ghi\n%/'
A nova linha que já existia permanecerá, então você vai acabar com % ghi em uma linha e % na próxima
Editar : se precisar corresponder apenas uma vez, a expressão será um pouco mais complicada. A maneira mais fácil de fazer isso em sed é:
sed '0,/^$/ s/^$/% ghi\n%/'
A substituição é agrupada em um intervalo de endereços 0,/^$/ , o que significa "aplicar somente o seguinte às linhas entre 0 e a primeira linha que corresponde a ^$ ". Como a expressão de substituição também verifica ^$ , a única linha que realmente vai mudar é a primeira que corresponde a ^$ - a primeira linha em branco