现在位置: 首页 > 博客文章 > 电脑相关 > IT开发 > 开发语言 > Perl > 正文
Can’t do inplace edit without backup
2015年03月20日 13:08:46 Perl ⁄ 共 970字 暂无评论 ⁄ 被围观 2,347次

学习《精通正则表达式》这本书的过程中,碰到 Perl 语言查找替换文件内容时,想试一试,过程如下:

第一步,先在 e 盘的建立 Test 文件夹,在其下创建一个 testp.txt 的文件,内容如下:
testp.txt内容:
I'm langlang.
My name is langlang.
My blog is "http://langlang.sinaapp.com/".

第二步,打开 Perl Command Line,输入如下命令:
perl -p -i -e 's/langlang/langtuteng/g' e:\Test\testp.txt

报错:Can't do inplace edit without backup.

上网查了下,说是在 Linux 下可以成功,但在 Window 上不行。Linux 我也没试,不知道是不是真的可以,不嫌麻烦的朋友可以去试试,但 Window 上是肯定不行的,原因是 perl 在修改文件时,为了避免误操作,所以必须把原文件先备份,然后才能修改。

于是把命令改成下面的格式:
perl -p -i".bak" -e 's/langlang/langtuteng/g' e:\Test\testp.txt

没报错,testp.txt.bak 文件也生成了,可源文件和新生成的文件都没有变化,还是没替换。

注意:如果在备份后缀名时左右用单引号,不报错,但会生成 testp.txt'.bak'文件。

删除生成的 .bak 文件,抱着试一下的心理,把命令中的单引号改为双引号:
perl -p -i".bak" -e "s/langlang/langtuteng/g" e:\Test\testp.txt

没报错,备份文件同时生成,打开备份文件,是替换前的内容,打开 testp.txt,可以看到文本“langlang”已替换为“langtuteng”了:
testp.txt内容:
I'm langtuteng.
My name is langtuteng.
My blog is "http://www.menglanglang.cn/".

但书上用的是单引号,可以成功,为什么现在必须用双引号,也许是 Perl 版本的升级问题吧,作者出版书时用的是老版本,经过这么多年的发展变化,也许新版的 Perl 和以前多多少少有些差别。这点小问题,无关紧要,这里就不查证了,只是大概猜想一下。

OK,错误解决,不得不说 Perl 确实很强大,Good Luck!

给我留言

留言无头像?