2012-02-08 35 views
1

對於在bash腳本下面配管:如何在Bash腳本中將Bash命令輸出管道化爲多行Perl代碼?

Bash command | perl -ne 'single line perl command' | Another Bash command 

Perl的命令只能是單行。如果我想編寫更復雜的多行Perl命令,那麼如何?我可以用perl的每一個命令行多個「-e」選項,如:

perl -n -e 'command line 1' -e 'command line 2' -e 'command line 3' 

或者,我可以使用「立即文檔」爲多行的Perl代碼(perl的選項,如「 - n「,在這種情況下應該仍然可以被指定)。

如果可以使用「Here Document」,任何人都可以說明如何使用它。

在此先感謝您的任何建議。

回答

6

如果你的Perl腳本是太長,在單獨行進行控制(用分號分隔Perl語句),然後bash是很樂意在多達線延伸你的單引號的說法,因爲你需要:

Bash-command | 
perl -ne 'print something_here; 
      do { something_else } while (0); 
      generally("avoid single quotes in your Perl!"); 
      say q{Here is single-quoted content in Perl}; 
     ' | 
Another-Bash-Command 

另外,'perldoc perlrun'手冊說:

-e commandline

可以用來輸入程序的一個線。如果給出-e,Perl將不會在參數列表中查找文件名。可以給出多個-e命令來構建多行腳本。確保在正常程序中使用分號。

-E commandline

行爲就像-e,但它隱含啓用所有可選功能(在主編譯單元)。

所以,你也可以這樣做:

Bash-command | 
perl -n -e 'print something_here;' \ 
     -e 'do { something_else } while (0);' \ 
     -e 'generally("avoid single quotes in your Perl!");' \ 
     -e 'say q{Here is single-quoted content in Perl};' | 
Another-Bash-Command 

如果腳本比,也就是說,20日線(10和50,有點根據的選擇之間的某處)變得更大,那麼它可能是時間來分離Perl腳本放入它自己的文件並運行它。

4

對於多行Perl,您只需要用分號分隔命令,而不是傳遞多個-e調用。例如:

perl -n -e 'command line 1; command line 2;' 

(雖然我通常不會說perl塊是一個「命令行」,本身)。