2013-08-28 63 views
-1

當我想在許多文件中替換一個常見單詞時,我使用unix中命令行中的perl。 我想知道什麼是-pi和-e在運行時會發生什麼,如果我不放那些,會發生什麼情況。當在perl中執行命令時,-pi和-e是什麼

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

+1

'perl的-h'。 '-i'進行現場替換 –

+3

但是不要將'-p','-i'和'-e'堆棧爲'-pie',因爲'-i'接受一個參數並將'e'作爲參數。 –

+1

這是我很久以前稱之爲[Perl命令行的實地指南](https://speakerdeck.com/petdance/a-field-guide-to-the-perl-command-line)的演示文稿,它有一個快速總結一些例子。 –

回答

3

這全部在perlrun記載(從perldoc perlrunman perlrun獲得)。

  • -e治療參數(如果有的話)或下一個參數(否則)作爲Perl代碼執行的其餘部分。代替腳本名稱。

    $ perl -e'print "abc\n";' 
    abc 
    
  • -n執行用於的ARGV每行的腳本(或-e代碼)。該行將出現在$_

    $ 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 
    
相關問題