使用perl在两行之间插入新行

时间:2011-12-12 08:49:03

标签: perl line-processing

我想在第2行和第3行之间插入包含此行的连接字符串的行

abc
abcd:
abc
abcd

输出:

abc
abcd:
abcd: abcd
abc
abcd

3 个答案:

答案 0 :(得分:1)

您想在以冒号结尾的行之后或第2行之后添加内容吗?

如果在第2行之后,您可以split("\n", $string)获取一系列行,将新行拼接到位置2的数组中,然后join("\n", @array)将该字符串拼接回来。

如果在以冒号结尾的行之后,您可以使用正则表达式:s/(:\n)/\1YOUR_NEW_LINE_HERE\n/

答案 1 :(得分:1)

由于你没有在以冒号结尾的每一行之后指定你想要放置的内容,所以我创建了一个表来代表一些通用的决策和一些灵活的处理。

# create a table
my %insert_after 
    = ( abcd => "abcd: abcd\n"
      , defg => "defg: hijk\n"
      );

# create a list of keys longest first, and then lexicographic 
my $regs  
    = '^(' 
    . join( '|', sort { length $b <=> length $a or $a cmp $b } 
                 keys %insert_after 
          )
    . '):$'
    ;
my $regex = qr/$regs/;

# process lines.
while ( <> ) { 
    m/$regex/ and $_ .= $insert_after{ $1 } // '';
    print;
}

在当前文本之后“插入”一行就像将该文本附加到当前文本并输出一样简单。

答案 2 :(得分:1)

perl -p -i.bck -e "if ($last ne ''){ $_=~s/.*/$last $&\\n$&/; $last=''} elsif (/:/) {$last = $_;chomp($last);} else {$last = '';}" test

test是有问题的文件