如何在perl中使用regex修改文件数量

时间:2013-05-08 05:26:10

标签: regex perl

大家好我从一本书中获得了这个示例代码,该书介绍了如何使用正则表达式修改文件数量的内容。

#!/usr/bin/perl -w
    use strict;
    chomp(my $date = `date`);
    $^I = ".bak";
    while (<>) {
      s/^Author:.*/Author: Randal L. Schwartz/;
      s/^Phone:.*\n//;
      s/^Date:.*/Date: $date/;
      print;
    }

从它的外观来看,我知道缺少一些东西 - 这就是文件名。但这本书坚持认为。因此,当我自己尝试时,它只接受来自键盘的输入,这是我所期望的。所以我有一个修改过的代码,它会打开一个文件而不再创建一个备份:

由此行处理

$^I = ".out";



#! usr/bin/perl
use warnings;
use strict;

open (MYFILE,'fewlines');
$^I = ".out";

while (<MYFILE>) {
    s/fred/larry/ig;
    print;
}

此行也是如此,但在命令提示符下。我想不是在命令提示符下编写程序本身

perl -p -i.out -w -e 's/fred/larry/ig' filename

如何在程序中转换该行?

1 个答案:

答案 0 :(得分:3)

<><ARGV>的缩写,读取@ARGV中指定的文件(如果有),否则读取STDIN。

perl -p -i.out -w -e 's/fred/larry/ig' filename

确实

@ARGV = 'filename';
$^I = '.out'
$^W = 1;
LINE: while (<>) {
   s/fred/larry/ig
} continue {
   die "-p destination: $!\n" unless print $_;
}