在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 11335|回复: 14

[求助] perl中$^I的使用方法

[复制链接]
发表于 2012-3-13 14:17:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我现在想完成一个任务,就是想要使用perl批量修改文件内容,在网上查了之后,发现可以使用$^I变量,我也知道这个变量好像是给原始文件创建一个副本,但是他到底怎么使用,哪位大侠可否给个例子,谢谢!
 楼主| 发表于 2012-3-13 15:10:26 | 显示全部楼层
再追问一个问题,这种操作符是否只有在使用钻石操作符的时候才起作用?钻石操作符是否指的就是在一对尖括弧中间没有任何内容的尖括弧,尖括弧中如果有了内容,是否就不称为钻石操作符了?
发表于 2012-4-6 11:42:00 | 显示全部楼层
这个好像是正则表达式
发表于 2012-4-17 14:40:06 | 显示全部楼层
用$^I变量更新多个文件
        例子:
        $^I= "~";
        while (<>) {
        s/^Author:.*/Author: Randal L. Schwartz/;
        s/^Phone:.*\n//;
        s/^Date:.*/Date: $date/;
        print;
        }
        这时候,perl会将打开的多个文件(假设为*.dat),的文件名改为*.dat~,然后创建一个新的*.dat,将修改后的内容写入data1.dat。这样用户再更新文件时,就无需打开多个文件进行操作了。$^I 的值还可以通过在调用程序时,加-i 选项来改变,如 perl -i ".bak"。
 楼主| 发表于 2012-4-17 14:54:58 | 显示全部楼层
回复 4# xlt9999


    十分感谢!
发表于 2012-4-17 15:47:04 | 显示全部楼层
回复 5# l2002924700


    不客气,呵呵。大家多交流才能学的更快。
发表于 2012-4-25 15:46:26 | 显示全部楼层
我怎么记得 -i 是in place edit的意思,就是直接覆盖该文件,

不用写到另外一个新文件,
发表于 2014-5-8 00:24:57 | 显示全部楼层
good explaination
发表于 2014-5-8 14:31:19 | 显示全部楼层
回复 7# icfbicfb


    -i 后的参数会传入$^I中。

比如 perl -p -i.bak -e 'some change' file.txt

会将:  旧版file.txt - > file.txt.bak;   change后的-> file.txt
发表于 2014-5-22 13:52:05 | 显示全部楼层
回复 9# sjtusonic


    请问在上面的例子中,我如果不用while(<>),而是open(FH, "filename"),然后while(<>)的话,这样就不能保存备份文件,然后in place修改源文件...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-16 16:09 , Processed in 0.034743 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表