【问题标题】:Perl: insert elements of array in file by substitutionPerl:通过替换将数组的元素插入文件中
【发布时间】:2015-06-25 05:35:30
【问题描述】:

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

文件内容:

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

2.)我有一个数组

@array = qw (ele1 ele2 ele3);

这个数组可以有 2 个或更多元素。

3.)我想打开文件,用下面的伪代码替换字符串:

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 工具的解决方案。

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 这就是我想要的。非常感谢!
    【解决方案2】:

    您实际上可以在没有/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”的行,则需要 ^$ 锚点。

    【讨论】:

      【解决方案3】:

      你也可以上网

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

      【讨论】:

        猜你喜欢
        • 2013-01-24
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 1970-01-01
        • 2017-11-10
        • 2014-12-10
        • 2015-04-30
        相关资源
        最近更新 更多