-1

当我想替换许多文件中的常用词时,我在 unix 的命令行中使用 perl。我想知道运行它时 -pi 和 -e 是什么,如果我不放它们会发生什么。

例子:perl -pi -e 's/design/dezine/g' *

4

1 回答 1

3

这些都记录在perlrun中(从perldoc perlrun和获得man perlrun)。

  • -e将参数的其余部分(如果有)或下一个参数(否则)视为要执行的 Perl 代码。代替脚本名称。

    $ perl -e'print "abc\n";'
    abc
    
  • -n-e为每一行执行脚本(或代码) ARGV。该行将出现在$_.

    $ perl -MO=Deparse -ne'print uc($_);'
    LINE: while (defined($_ = <ARGV>)) {
        print uc $_;
    }
    -e syntax OK
    

    $ echo abc | perl -ne'print uc($_);'
    ABC
    
  • -p就像-n,除了它也会导致$_在代码执行后打印。

    $ perl -MO=Deparse -pe'print uc($_);'
    LINE: while (defined($_ = <ARGV>)) {
        print uc $_;
    }
    continue {
        die "-p destination: $!\n" unless print $_;
    }
    -e syntax OK
    

    $ echo abc | perl -pe'$_ = uc($_);'
    ABC
    
  • -i代表“就地”。它将输出“重定向”回ARGV正在读取的文件。

    BEGIN { $^I = ""; }
    LINE: while (defined($_ = <ARGV>)) {
        print uc $_;
    }
    continue {
        die "-p destination: $!\n" unless print $_;
    }
    -e syntax OK
    

    $ echo abc >file
    
    $ perl -i -pe'$_ = uc($_);' file
    
    $ cat file
    ABC
    
于 2013-08-28T18:35:22.760 回答