繁体   English   中英

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

[英]How to insert lines, 2 lines after the matched line in Perl

我试图在Perl中将数据文件之一或某些字符插入到现有文件中。

例如,假设我们有“数据”文件和“ 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

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

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

应该做

我建议您阅读: perlfaq5-如何更改,删除或在文件中插入一行,或追加到文件的开头?

在这种情况下,我建议使用$INPLACE_EDIT修改文件,并使用触发器运算符确定何时插入新数据:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM