如何在Perl中的匹配行之后插入2行

时间:2014-08-19 04:45:34

标签: regex perl

我正在尝试将其中一个数据文件或一些字符插入到perl中的现有文件中。

例如,假设我们有'data'文件和'extraData'文件。 如果数据文件包含高度信息,请在高度后一行之后插入extraData文件中的信息。

数据:

red fox
likes to run
Height:
120
speed:
140

额外数据:

Weight:
70

结果:

red fox
likes to run
Height:
120
Weight:
70
speed:
140

目前我已实施以下代码,并且在找到“身高”后立即打印重量信息。我想打印高度及其信息,然后附上重量信息。

假设$ weight具有extraData文件的权重信息:

use File::Copy;
copy( "data", "copy" ) or die "Copy failed: $!";
unlink("data.txt");

open FILE, '<', 'copy';
open OUT,  '>', 'data';

while ( my $line = <FILE> ) {
    if ( grep {/Height/} $line ) {
        print OUT $line;
        print OUT "Weight \n";
        print OUT $weight;
    }
    else {
        print OUT $line;
    }
}

结果:

red fox
likes to run
Height:
Weight:
70
120
speed:
140

任何帮助将不胜感激, 感谢

2 个答案:

答案 0 :(得分:0)

perl -plne 'print "Weight:\n\n70\n" if(/speed/);' test.txt

应该这样做

答案 1 :(得分:0)

我建议您阅读:perlfaq5 - How do I change, delete, or insert a line in a file, or append to the beginning of a file?

在这种情况下,我建议使用$INPLACE_EDIT修改文件,并flip-flop operator确定何时插入新数据:

use strict;
use warnings;

my $file = 'data';

local @ARGV = $file;
local $^I   = '.bak';
while (<>) {
    print;
    print "Weight:\n70\n" if /Height/ .. /\d/ and /\d/;
}
# unlink "$file$^I"; # Optional delete backup