bash:替换文本块

时间:2018-05-22 14:48:34

标签: bash sed

我有一个文件

# my file
# is here

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

我需要用其他内容替换第一部分的内容:

section1 {
      bar
      really important
}

我已尝试使用sed正则表达式匹配,但它会捕获第二部分结束括号。我该怎么做?除sed之外的其他工具也是受欢迎的。

由于

1 个答案:

答案 0 :(得分:0)

这是一个快速而又脏的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 );

它确实保留了原始文件,并为您提供了第二个包含编辑内容的文件,而不是编辑原始文件,但它更像是一个基本原则示例,可帮助您入门。