perl -pe 's/^/++$a.$"/e if /^\[/ ... /^$/ and /^(?!\[)./' file.txt
Resultados
TITLE: hello world
SUBTITLE: document about hello world
[CONTENT 1]
1 That's a line
2 Another one
3 Row
[EXAMPLE]
4 Example line
[CONTENT 2]
5 A
6 B
7 C
Text, text, text....
Explicação
-
A opção
-p
processa o arquivo linha por linha + a autoprint está ativada. -
s/^/.../e
prefixará o contador e um espaço ($"
= separador de lista = espaço por padrão) -
O modificador
/e
do comando substituto tratará o RHS como código Perl a ser avaliado e o resultado colocado como resultado da substituição. - A substituição ocorre apenas quando a regex a seguir é selecionada:
-
/^\[/ .. /^$/
= > isso seleciona um intervalo de linhas a partir de uma linha que começa com um colchete de abertura e o intervalo termina quando uma linha vazia é encontrada. - O intervalo é ainda mais refinado selecionando uma linha que rejeita os limites do intervalo, isto é, correspondendo a uma linha que tenha pelo menos um caractere e a linha não comece com um colchete de abertura. Então, somente quando estes dois são atendidos, a substituição acontece, OTW as linhas são deixadas ir como está.
-
- A opção autoprint imprimirá a linha finalmente.