Regex 使用Perl在线编辑,如何在字符串出现第n次后插入一行?
正在查找在给定字符串第n次出现后插入行的方法Regex 使用Perl在线编辑,如何在字符串出现第n次后插入一行?,regex,perl,scripting,Regex,Perl,Scripting,正在查找在给定字符串第n次出现后插入行的方法 perl -ni -e 'print; print "Put after fifth line\n" if $. == 5' inFile.txt 下面的内容与我要查找的内容很接近,但是是基于行号的,而不是基于给定字符串的第n次出现 perl -ni -e 'print; print "Put after fifth line\n" if $. == 5' inFile.txt 以下内容将在字符串第二次出现后添加一行xyz: perl -pi -
perl -ni -e 'print; print "Put after fifth line\n" if $. == 5' inFile.txt
下面的内容与我要查找的内容很接近,但是是基于行号的,而不是基于给定字符串的第n次出现
perl -ni -e 'print; print "Put after fifth line\n" if $. == 5' inFile.txt
以下内容将在字符串第二次出现后添加一行
xyz
:
perl -pi -e '/abc/&&++$n==2 and $_.="xyz\n"' inFile.txt
如果要在字符串每出现五次后重复一次,可以在
BEGIN
块中创建一个变量并监视它:
perl -n -e 'BEGIN{$c=0;} print; $c++ if /one/; if ($c==5){print "Put after fifth entry\n";$c=0}' inFile.txt
[看到有人查看常见问题解答总是很高兴!]
我会这样做:
% perl -ni -e 'print; print "Inserted\n" if (/time/ && ++$c) == 3' input.txt
计数器变量$c
由匹配运算符的返回值递增。如果不匹配则为0,如果匹配则为1(它在标量上下文中使用,因此即使使用/g
也最多只匹配一次)。在更新到$c
之后,它将与您想要的值进行比较
以下是input.txt:
结果是:
First time
Second time
Third time
Inserted
Fourth time
或者,您可以使用-p
将其缩短一点,它会自动将打印
放在末尾。在这种情况下,您将在下一行之前插入该行,而不是在前一行之后插入该行(如果您没有足够的行位于某个行之前,则可能会出现问题):
,如果你还没有使用它,你可以考虑升级到V5.28。通过先写入临时文件,然后在程序成功完成后替换源文件。
如果未启用警告,则无需初始化计数perl -pe'$_.="foo\n" if /bar/ && ++$c == 5'
模(%
)运算符非常适合检测每N次
perl -pe'$_.="foo\n" if /bar/ && ++$c % 5 == 0'
一行可以多次出现字符串吗?计数器应该重置(或者在满足条件后不应该完全检查条件,具体取决于要求)。。。否则将继续打印插入的
,直到计数器更改。。例如,从第四次
行中删除时间
。如果第四行被删除并且脚本如图所示,则插入发生在第三行之前,而不是之后???如果(/\time/&&&+$c)==3'input.txt使用-p
,则当前行的输出在插入之后。这就是为什么我在第二个一号班轮中把数字改大了一个。
perl -pe'$_.="foo\n" if /bar/ && ++$c % 5 == 0'