Chinaunix首页 | 论坛 | 博客
  • 博客访问: 475372
  • 博文数量: 104
  • 博客积分: 3455
  • 博客等级: 中校
  • 技术积分: 1216
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-18 18:33
文章分类

全部博文(104)

文章存档

2015年(3)

2014年(1)

2013年(7)

2012年(8)

2011年(11)

2010年(18)

2009年(56)

我的朋友

分类:

2009-07-16 10:25:19


以去掉一个文件中#开头的注释行为例.

一.命令行
-i  把源文件更名然后从这个更名的源文件里读取.最后把处理后的数据写入源文件.
perl -i.bak -ne'print unless m/^#/' filename

二.代 码
$^I 使用用同 -i参数,使用于代码中.
(1) 直接程序后跟文件名.
(2) 把文件名放入@ARGV内置变量内.
然后使用<>操作符循环读取修改.

#!/usr/bin/perl -w
$^I='.bak';
push @ARGV,'filename';
while (<>) {
     print unless m/^#/;
}


注意:使用以上参数后,文件将新建并作为程序的标准输出,程序里要包含print等输出语法,不然文件将为空.



以上方式将产生一个与原文件相同大小的备份文件,下面方法真正在一个文件操作.

#!/usr/bin/perl -w
use strict;
open F1,'<', 'filename' or die;
open F2,'+<','filename' or die;
while ( ) {
    print F2 unless m/^#/;
}
truncate(F2, tell(F2));
close F1;
close F2;

简要说一下原理:F1和F2将使用不用的文件指针,F1的指针一定大于等于F2的指针,F2为可读写方式打开,可以对其进行修改,tell()函数返回句柄当前的字节数,,truncate截断文件该字节数后面的内容.



阅读(1325) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~