Попробуйте (также из комментария @IporSircer) вместо этого:
while true;
do ~ / bin / ap ; сон 2; выполнено
perl -pe 's/^/++$a.$"/e if /^\[/... /^$/ and /^(?!\[)./' file.txt
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....
-p
обрабатывает строку файла -по строке -+ включена автопечать. s/^/.../e
добавит счетчик и пробел($"
= разделитель списка = пробел по умолчанию)/e
Модификатор команды replace будет рассматривать RHS как код Perl, который необходимо оценить, а результат будет помещен в качестве результата замены. /^\[/.. /^$/
=> выбирает диапазон строк, начиная со строки, начинающейся с открывающейся квадратной скобки, и заканчивая диапазоном при обнаружении пустой строки. awkрешение:
awk '/^\[.+\]/{ f=1 }f && $0~/^\w/{ $0=++c FS $0 }!NF{ f=0 }1' file
/^\[.+\]/{ f=1 }
-сопоставление строки со скобками и пометка ее флагом f
f && $0~/^\w/{ $0=++c FS $0 }
-добавить значение счетчика для строк после строки "со скобками"
!NF{ f=0 }
-игнорирование пустых строк и следующих за ними(f=0
-сброс флага, предполагающего встречное действие)
Выход:
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....