2012-02-29 95 views
2

假設我有與這些輸入的文件:如何忽略perl中的多個換行符?

line 1 


line 2 

line3 

我的程序應該只存儲「行1」,「2號線」和「3號線」不換行。我如何實現這一目標? 我的程序已經刪除了前導空白和尾隨空白,但它無助於刪除換行符。 我將$ /設置爲\ n,因爲每個輸入都由\ n分隔。

+0

將Perl放入段落模式。將$ /設置爲空字符串。 – 2012-02-29 13:47:27

回答

5
while (<>) { 
    chomp; 
    next unless /\S/; 
    print "$_\n"; 
} 
+0

謝謝! 「下一個除非/ \ S /;」訣竅! – Sakura 2012-02-29 03:33:27

3

$/ = q(); # that's an empty string, like "" or '' 
while (<>) { 
     chomp; 
     ... 
} 

定義空字符串的特殊價值是你告訴輸入操作符來治療一個或多個換行符終止(寧願更多),並且還獲得chomp到全部刪除它們。這樣每個記錄總是以真實數據開始。

+0

+1爲'$/= q()'...你讓我在perldoc perlvar中查找它。 – 2012-02-29 04:26:28

0

Perl -n相當於在腳本週圍環繞(<>){}。假設所有你需要做的就是消除空白行,你可以做這樣的:

#! /usr/bin/perl -n 
print unless (/^$/); 

...在另一方面,如果這就是你需要做的,你不妨溝Perl和使用

grep -n '^$' 

編輯:您的文章說,要存儲在那裏線是不是空白......在這種情況下值,假設你沒有太多的工作在你的腳本的其餘部分做的,你可能會這樣做:

#! /usr/bin/perl -n 
my @values; 
push @values, $_ unless (/^$/); 

END { 
    # do whatever work you want to do here 
} 

...但是如果END {}塊中有很多代碼,它很快就會達到限制返回點。