在perl中执行命令时-pi和-e是什么

时间:2013-08-28 18:02:54

标签: perl

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

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

1 个答案:

答案 0 :(得分:3)

这些都记录在perlrun中(从perldoc perlrunman 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