免费注册 查看新帖 |

Chinaunix

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

一个关于多个文件内容修改得问题,请大家帮忙 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-31 23:27 |只看该作者 |倒序浏览
实际应用是需要修改某个目录的每个文件,过去是把文件复制一份,生成.bak,然后读取备份文件覆盖源文件,现在的需求是读的时候直接写文件
使用IO::File +< file结果不对
大家有什么好方法吗?
还有想请教
$fh->autoflush(1)和$|=1是一个作用吗?
谢谢大家
下面有个简单的例子
file内容就是cat /etc/hosts > file
只是做个测试

#!/usr/bin/env perl
use strict;
use warnings;
use IO::File;

my  $fh = new IO::File "< file";
           if (defined $fh) {
               while (<$fh>){
s/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/192.168.0.0/g;
print ;
}
}

论坛徽章:
0
2 [报告]
发表于 2011-09-01 00:01 |只看该作者
使用$^I=""
while(<>)可以修改

不过应该还有别的办法啊
有人知道吗

论坛徽章:
0
3 [报告]
发表于 2011-09-01 00:14 |只看该作者
# Asking for trouble w/o .bak

perl -i.bak -pe 's/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/192.168.0.0/g' /path/to/files/*

论坛徽章:
0
4 [报告]
发表于 2011-09-01 13:35 |只看该作者
查到之前有人遇到过这个问题
可以用这个模块解决
http://search.cpan.org/~mjd/Tie-File-0.96/lib/Tie/File.pm
use Tie::File;
        my $file = "file";
        my @array;
        tie @array, 'Tie::File', $file or die "$!\n";
        for (@array) {
        my $ip = $1 if /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
        s/$ip/192.168.0.20/g if $ip;
        }
        untie @array;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP