代码之家  ›  专栏  ›  技术社区  ›  Inetquestion

使用Perl行内编辑,如何在第n次出现字符串后插入行?

  •  3
  • Inetquestion  · 技术社区  · 6 年前

    寻找在给定字符串第n次出现后插入行的方法。

    perl -ni -e 'print; print "Put after fifth line\n" if $. == 5' inFile.txt
    
    4 回复  |  直到 6 年前
        1
  •  5
  •   blhsing    6 年前

    xyz 在字符串第二次出现之后 abc

    perl -pi -e '/abc/&&++$n==2 and $_.="xyz\n"' inFile.txt
    
        2
  •  4
  •   ikegami    6 年前

    perl -pe'$_.="foo\n" if /bar/ && ++$c == 5'
    

    模数( % )接线员很擅长每N次的探测。

    perl -pe'$_.="foo\n" if /bar/ && ++$c % 5 == 0'
    
        3
  •  2
  •   brian d foy JRFerguson    6 年前

    [ 很高兴看到有人检查了FAQ! How do I change, delete, or insert a line in a file, or append to the beginning of a file? . ]

    % perl -ni -e 'print; print "Inserted\n" if (/time/ && ++$c) == 3' input.txt
    

    $c 由match运算符的返回值递增。如果不匹配,则为0;如果匹配,则为1(它在标量上下文中使用,因此即使使用 /g 最多只能匹配一次)。更新之后 c美元 与你想要的价值相比。

    这是 输入文件 :

     First time
     Second time
     Third time
     Fourth time
    

    结果是:

     First time
     Second time
     Third time
     Inserted
     Fourth time
    

    -p 它自动地 print 最后。在这种情况下,你最终插入了 之前 之后 前一行(如果你没有足够的行来处理某件事,这可能是个问题):

    % perl -pi -e 'print "Inserted\n" if (/time/ && ++$c) == 4' input.txt
    

    而且,如果您还没有使用它,可以考虑升级到v5.28。 In-place editing gets a bit safer

        4
  •  1
  •   stevieb    6 年前

    如果要在字符串每出现五次后重复,可以在 BEGIN

    perl -n -e 'BEGIN{$c=0;} print; $c++ if /one/; if ($c==5){print "Put after fifth entry\n";$c=0}' inFile.txt