2017-08-17 58 views
-1

我需要處理一個日誌文件。我通過<STDIN>將它發送給Perl。我只需要輸出摘要,其中包含幾個等號。在Perl中,如何輸出(打印)字符串後面的所有行?

摘要是日誌中的最後一位。所以,我需要從=到EOF之後開始的所有事情。

我嘗試使用while循環與「next unless」,但我無法得到它的工作。

+0

請問那些誰投下來解釋爲什麼,所以我能學到什麼? –

+1

我沒有,但這很清楚:顯示你的代碼和輸入/輸出的樣本。它還使您更容易在描述中精確和清晰地表達。這個問題非常不完整,並且不清楚。 – zdim

回答

3

您需要一個標誌或兩個循環。


在輸出中包括觸發線:

perl -e' 
    while (<>) { 
     last if /===/; 
    } 

    if (defined($_)) { 
     print; 
     while (<>) { 
     print; 
     } 
    } 
' log 

perl -ne'print if $print ||= /===/' log 

不包括在輸出觸發線:

perl -e' 
    while (<>) { 
     last if /===/; 
    } 

    if (defined($_)) { 
     while (<>) { 
     print; 
     } 
    } 
' log 

perl -ne'last if /===/; END { print while <> }' log 

perl -ne'print if $print; $print ||= /===/' log 

perl -ne'print unless 1 .. /===/' log 
+2

@SinanÜnür,我想在這個特別的解決方案中表現得很清楚,而且我很懶得檢查是否'BLOCK while'<>;'表示'在定義($ _ = <>);'時執行BLOCK'。 [它的確如此。詛咒你讓我檢查;)] – ikegami