用perl直接修改原文件[转自ChinaUnix Point's Blog]

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

一.命令行
-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截断文件该字节数后面的内容.


相关推荐

你的评论

就没有什么想说的吗?

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X