bash: заменить блок текста - PullRequest
0 голосов
/ 22 мая 2018

У меня есть файл

# my file
# is here

section1 {
      foo
      nothing important
}
section2 {
      this is important
      this is also important
}

Мне нужно заменить содержимое первого раздела другим содержимым:

section1 {
      bar
      really important
}

Я пытался использовать sed сопоставление регулярному выражению, но этоловит 2-ю секцию, заканчивающуюся скобкой.Как мне это сделать?Другие инструменты, кроме sed приветствуются.

Спасибо

1 Ответ

0 голосов
/ 22 мая 2018

Вот быстрый и грязный Perl-файл, который сделает это:

#!/usr/bin/perl

open ( INFILE, 'document.txt' ) || die "Cannot read input file.";
open ( OUTFILE, '>document2.txt' ) || die "Cannot write output file.";

$replaced = "0";

while ( $line_in = <INFILE> ) {
    print OUTFILE $line_in;
    next unless $line_in =~ /^\s*section1 {\s*$/ && $replaced eq "0";
        print OUTFILE "      bar\n";
        print OUTFILE "      really important\n";
        while ( $line_in = <INFILE> ) {
            next unless $line_in =~ /^\s*}\s*$/;
                print OUTFILE $line_in;
                $replaced = "1";
                last;
        }
}

close ( INFILE );
close ( OUTFILE );

Он оставляет исходный файл в покое и дает вам второй файл с изменениями, а не редактирует исходный файл на месте,но это скорее пример базовых принципов, с которых можно начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...