在匹配文本之前插入新的文本行

use*_*091 3 perl file-io parsing insertion

在文本文件中,我想使用perl在另一行文本的每个匹配之前插入一行新文本.

示例 - 我的文件是:

holiday
april
icecream: sunday
jujubee
carefree
icecream: sunday
Christmas
icecream: sunday
towel

...
Run Code Online (Sandbox Code Playgroud)

我想'icecream: saturday'在' icecream: sunday'行之前插入一行文本.所以之后,文本文件看起来像.是的,我需要结肠:在搜索和替换模式中都.

holiday
april
icecream: saturday
icecream: sunday
jujubee
carefree
icecream: saturday
icecream: sunday
Christmas
icecream: saturday
icecream: sunday
towel
...
Run Code Online (Sandbox Code Playgroud)

我想在Windows PC上使用perl 5.14来做这件事.我已经安装了Perl.我在这个网站上搜索并尝试了很多其他的例子,但它们并不适合我,不幸的是我不是Perl的完整专家.

如果有一个例子也使用sed我也有Cygwin sed.

Dav*_*oss 6

这是一个命令行版本.

perl -i.bak -pe '$_ = qq[icecream: saturday\n$_] if $_ eq qq[icecream: sunday\n]' yourfile.txt
Run Code Online (Sandbox Code Playgroud)

命令行选项的说明:

-i.bak:对输入文件执行操作,创建扩展名为.bak的备份版本

-p:循环输入文件的每一行,将行放入$ _并在每次迭代后打印$ _

-e:对输入文件中的每一行执行此代码

Perl的命令行选项记录在perlrun中.

代码说明:

如果数据行($ _)是"icecream:sunday \n",那么在该行前面加上"icecream:saturday \n".

然后只需打印$ _(这是使用-p标志隐式完成的).