Chinaunix

标题: (已解决)perl中替换文件的问题 [打印本页]

作者: yinsong198611    时间: 2013-05-16 18:02
标题: (已解决)perl中替换文件的问题
本帖最后由 yinsong198611 于 2013-05-17 13:22 编辑

#!/usr/bin/perl -w
use strict;
use 5.010;
use File::Find;
my @file;
find(\&wanted,"/tmp/tmp");

sub wanted{
    push @file, $File::Find::name if (-f $_ and $_ =~ m/abc.txt$/);
}

@ARGV=@file;
$^I="";
while (<>){
        next unless ($_ =~ m!data=1!);
        $_ =~ s/data=1//g;
}


请教一下,我的代码是查找遍历/tmp/tmp下的abc.txt文件并且将文件中data=1替换成空白
但是每次执行此代码都把abc.txt文件清空,请问是什么原因。

---------------------------------
感谢kk861123的热情解答,已解决并学习了perl修改文件的处理
作者: kk861123    时间: 2013-05-16 18:39
本帖最后由 kk861123 于 2013-05-16 18:39 编辑

回复 1# yinsong198611

这行后面
  1. $_ =~ s/data=1//g;
复制代码
  1. print;
复制代码

作者: yinsong198611    时间: 2013-05-17 09:14
回复 2# kk861123
在后面加print;也不行哈市把文件清空了


   
作者: kk861123    时间: 2013-05-17 09:51
回复 3# yinsong198611
  1. while (<>){
  2.         s/data=1//g;
  3.         print;
  4. }

复制代码

作者: yinsong198611    时间: 2013-05-17 10:38
回复 4# kk861123
恩,这样可以。有个问题请教一下,替换文件时必须加上print是什么原因呢。我不清楚是怎么处理的


   
作者: kk861123    时间: 2013-05-17 10:42
回复 5# yinsong198611


   文件修改的步骤应该是从文件中读取再写到另一个文件中,<>读,print 写
作者: rubyish    时间: 2013-05-17 10:44
学习学习。
作者: yinsong198611    时间: 2013-05-17 10:51
回复 6# kk861123
学习了,谢谢。听你一讲我就明白为什么next unless ($_ =~ m!data=1!);为什么要删了


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2