需要使用perl将值从一个文件替换为另一个文件

时间:2015-02-16 09:13:32

标签: perl replace

我正在使用perl编写一个程序,它从一个文件读取一个值并在其他文件中替换该值。程序运行成功,但价值没有被取代。请告诉我错误在哪里。

use strict;
use warnings;

open(file1,"address0.txt") or die "Cannot open file.\n";
my $value;
$value=<file1>;
system("perl -p -i.bak -e 's/add/$value/ig' rough.sp");

这里我要替换的值存在于address0.txt文件中。它是单个值1.我想在其他文件rough.sp。

中放置此值代替add

我的rough.sp看起来像

Vdd 1 0 add

我的地址0.txt看起来像

1

因此输出应该像

Vdd 1 0 1

请帮帮我。提前致谢

1 个答案:

答案 0 :(得分:0)

假设adress0.txt和rough.sp中的行之间存在1:1的关系,您可以这样继续:

use strict;
use warnings;

my ($curline_1,$curline_2);
open(file1, "address0.txt") or die "Cannot open file.\n";
open(file2, "rough.sp") or die "Cannot open file.\n";
open(file3, ">out.sp") or die "Cannot open file.\n";

while (<file1>) {
    $curline_1 = $_;
    chomp($curline_1);
    $curline_2 = <file2>;
    $curline_2 =~ s/ add/ $curline_1/;
    print file3 $curline_2;
}
close(file1);
close(file2);
close(file3);
exit(0);

说明:

代码并行迭代输入文件的行。请注意,读取的行包括行终止符。来自'address'文件的行内容将被视为.sp文件中add文字的替换值。消除了'address'文件中的行终止符,以避免引入其他换行符。

附录:

多次替换的扩展程序可能如下所示:

    $curline_1 = $_;
    chomp($curline_1);

    my @parts = split(/ +/, $curline_1); # splits the line from address0.txt into an array of strings made up of contiguous non-whitespace chars

    $curline_2 = <file2>;
    $curline_2 =~ s/ add/ $parts[0]/;
    $curline_2 =~ s/ sub/ $parts[1]/;
    # ...