+ -
当前位置:首页 → 问答吧 → 请教:perl ,关于变量$^I将修改的内容写回文件的操作

请教:perl ,关于变量$^I将修改的内容写回文件的操作

时间:2011-02-21

来源:互联网

在入门教成里看到这样一个例子:
我们有相似格式的上百个文件。其中一个是fred03.dat,如下:
Promram name: granite
Author: Gilbert Bates
Company: RockSoft
Department: R&D
Phone: +1 503 555-0095
Date: Tues March 9, 2004
Version: 2.1
Size: 21k
Status: Final beta
我们希望修改这个文件,使之含有不同的信息。下面是我们希望修改后它所呈现的样式:
Program name: granite
Author: Randal L. Schwartz
Company: RockSoft
Department: R&D
Date: June 12, 2008 6:38 pm
Version: 2.1
Size: 21k
Status: Final beta

程序如下:

#! /usr/bin/perl –w
use strict;
chomp(my $date = ‘date’);
$^I =“.bak”;
while(<>){
s/^Author:.*/Author: Randal L. Scharwartz/;
s/^Phone:.*\n//;
s/^Date:.*/Date: $date/;
print;
}

如果$^I 中有字符串,这个字符串则会成为备份文件的扩展名。
我们假设此时尖括号(<>)打开的文件是fred03.dat。它像以前那样打开它,但进行了重名名,把它叫做fred03.dat.bak◆。这
很好,因为不在使用之前的名字。现在<>将这个新的文件作为默认的输出,因此任何内容将输出到那个文件中◆。while
循环会从旧的文件中读入一行,更新它,再把它输出到新文件中。

但是我试过了,增加了$^I =“.bak”;并没有使我要修改的内容写回原文件。
$perl –p –i.bak –w –e ‘s/Randall/Randal/g’fred*.dat,这个命令行操作可以将文件修改。
不知道谁有类似的经验?谢谢了。

作者: lnjtyz   发布时间: 2011-02-21

这个问题在shell版中讨论过

http://bbs.chinaunix.net/thread-1797735-1-1.html

作者: ace_fei   发布时间: 2011-02-22

本帖最后由 Monox 于 2011-02-22 17:07 编辑

回复 lnjtyz
在这里试过,一切OK,测试环境,Linux, perl 5.12.3。
当然了,上面的程序里的
  1. 'date'
复制代码
应该是
  1. `date`
复制代码

作者: Monox   发布时间: 2011-02-22