perl 修改文件内容

2019-07-26  本文已影响0人  SQUA2E

Perl修改原文件

以去掉一个文件中#开头的注释行为例.
一.命令行
-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等输出语法,不然文件将为空.

$^I 原地编辑扩展的当前值。设置为 "undef" 时关闭原地编辑。(助记:-i开关的值。)

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

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

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


方法三:
使用模块:
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); # 解除文件同数组的关联

方法四:
命令$^I
例子:

#!/usr/bin/perl
use strict;

$^I="";
while(<>){
        s/^rate.*/rate=0/;
        s/^testMode.*/testMode=0/;
        print;
}

^I的值可以决定是要重写文件,还是备份文件,若要重写,只须将其值设为空就可,若要备份,则^I=".bak", 他就会把改过的文件命名为filename.bak了

上一篇下一篇

猜你喜欢

热点阅读