免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7780 | 回复: 11
打印 上一主题 下一主题

perl修改文件,请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-24 11:56 |只看该作者 |倒序浏览
小弟有一些文件要修改,但不想生成临时文件,想直接在原文件中修改,请问perl要怎么写呢?谢谢

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2008-02-24 12:33 |只看该作者
不如说说为什么不愿意生成临时文件?

论坛徽章:
0
3 [报告]
发表于 2008-02-24 18:28 |只看该作者
$^I=""

论坛徽章:
0
4 [报告]
发表于 2008-05-12 16:57 |只看该作者
我想想问同样的问题。楼上的答案好像不行

论坛徽章:
0
5 [报告]
发表于 2008-05-12 18:06 |只看该作者
挖坟啊
自己去看小骆驼
上面有很详细的的例子

论坛徽章:
0
6 [报告]
发表于 2008-05-13 08:39 |只看该作者
呵呵,那就把文件全部存储到数据或散列,然后修改撒,输出文件使用相同文件名覆盖。。。

论坛徽章:
0
7 [报告]
发表于 2008-05-13 08:57 |只看该作者
是啊,为什么不用临时文件

论坛徽章:
0
8 [报告]
发表于 2011-03-03 15:44 |只看该作者
回复 1# junchen2
测试文件 test.ini 内容如下:
-----------------------------
[ip]=10.137.5.174
[username]=xuhao
[port]=8088
----------------------------
suse linux下测试通过!
  1. #!/usr/bin/perl

  2. use warnings;

  3. system("clear");

  4. print "Need Modify file:";
  5. chomp($file=<STDIN>);
  6. system("cat $file");
  7. print "Before IP:";
  8. chomp($ip=<STDIN>);
  9. print "After IP:";
  10. chomp($new_ip=<STDIN>);
  11. print "Before Port:";
  12. chomp($port=<STDIN>);
  13. print "After Port:";
  14. chomp($new_port=<STDIN>);

  15. system("perl -pi -e s/$port/$new_port/g $file");
  16. system("perl -pi -e s/$ip/$new_ip/g $file");
复制代码

论坛徽章:
0
9 [报告]
发表于 2011-03-04 08:45 |只看该作者
内存中操作,然后再覆写文件。

论坛徽章:
0
10 [报告]
发表于 2011-04-29 09:10 |只看该作者

使用Tie::File模块

本帖最后由 zk1878 于 2011-04-29 09:12 编辑

Tie::File模块将文本文件的内容绑定到一个数组中,
这样对数组的任何操作都将直接是对文本文件的修改
以下是例子
use Tie::File;                                                                  

my @lines; # 文件关联数组                                                         
my $filename='./test.dat'; # 记录文件名                                          

tie(@lines,'Tie::File',$filename) or die; # 将记录文件同数组关联,默认为文本型文件
                                          # 记录分隔符使用"\r\n"或"\n"           

$lines[0]="Hello"; # 这里对数组内容的操作就直接反映到文件中去了                  
$lines[1]="world!"; # 增加一条新记录                                             
splice(@lines,1,0,"insert another line"); # 在老记录之间插入记录                                                      
delete $lines[0]; # 删除记录                                                     

untie(@lines); # 解除文件同数组的关联
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP