То есть вы просто хотите, чтобы между разделами вашего файла журнала было вертикальное пространство?
Есть несколько подходов, в частности, потому что вы знаете, что заголовок будет на отдельной строке. Во всех следующих примерах предположим, что @lines
уже заполнено из вашего входного файла.
Итак, первая техника: вставьте пробелы перед заголовком:
foreach my $line ( @lines ) {
if ( $line =~ m/Log File header/ ) {
print( "\n\n\n" ); # or whatever you want <space> to be
}
print( $line );
}
Следующим методом является использование регулярного выражения для поиска / замены блоков текста:
my $space = "\n\n\n"; # or whatever you want <space> to be
my $everything = join( "", @lines );
$everything =~ s/(Log File header.*?)(?=Log File header)/$1$space/sg;
print( $everything );
Некоторое объяснение о регулярном выражении. (?=
означает «просмотр вперед», который будет соответствовать, но не будет частью заменяемого выражения. Модификаторы /sg
означают s
- перевод строки в обычный пробел и g
- глобальный поиск и замена. .*?
означает выбрать что угодно, но как можно меньше, чтобы удовлетворить выражение (не жадное), что чрезвычайно важно в этом приложении.
update : отредактирован первый метод, в котором я не смог явно указать, с какой переменной сопоставлять.