Perl:通过替换在文件中插入数组元素

时间:2015-04-18 08:42:57

标签: arrays perl data-structures insert-update perl-data-structures

1)我有一个文本文件。该文件包含一个需要用多行代替的STRING,这些行是数组的元素。

档案内容:

line 1  
line 2   
line 3  
STRING  
line 4  
...  

2.)我有一个数组

@array = qw (ele1 ele2 ele3);

此数组可以包含2个或更多元素。

3.)我想打开文件,用以下伪代码替换STRING:

s/STRING/@array/;  

并将结果写入新文件。

4。)带结果的新文件应如下所示:

line 1  
line 2   
line 3  
ele1  
ele2  
ele3
line 4  
...

这是一段伪代码:

open (FILE "< file.txt");
open (OUTPUT "> new.txt");
@array=qw(ele1 ele2 ele3);
for $line (<FILE>) {
    s/STRING/@array/;
    print OUTPUT "$line\n";
}
close FILE;
close OUTPUT;

有关如何使用替换将数组元素插入此文件的任何建议吗?

我不是在寻找基于sedawkcat或Unix shell工具的解决方案。

3 个答案:

答案 0 :(得分:1)

你可以这样做:

my $str = "line 1
line 2
line 3
STRING
line 4";
my @array = qw (ele1 ele2 ele3);
$str =~ s/STRING/join"\n",@array/e;
say $str;

<强>输出:

line 1
line 2
line 3
ele1
ele2
ele3
line 4

答案 1 :(得分:0)

您实际上可以在没有/e运算符的情况下使用$"变量($LIST_SEPARATOR,如果您使用英语)执行此操作,这会更改数组在插入字符串时的连接方式(包括s///)的右侧:

$" = "\n";
@array = qw(ele1 ele2 ele3);
open FILE, 'file.txt';
open OUTPUT, '>', 'new.txt';
while (<FILE>) {
  s/^STRING$/@array/;
  print OUTPUT;
}

另请注意,如果您不希望它匹配包含单词“STRING”的行,则需要在正则表达式上使用^$个锚点。

答案 2 :(得分:0)

您也可以使用在线

perl -pi -e '@a=qw(a b c d e);$aa=join("\n",@a);s/string/$aa/g;' tt.txt