如何忽略perl中的多个换行符?

时间:2012-02-29 03:26:57

标签: perl

假设我有一个包含这些输入的文件:

line 1


line 2

line3

我的程序应该只存储" line1"," line2"和" line3"不是新行。我如何实现这一目标? 我的程序已经删除了前导空格和尾随空格,但删除换行符并没有帮助。 我将$ /设置为\ n,因为每个输入都以\ n。

分隔

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

设置

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

定义的空字符串的特殊值是如何告诉输入操作符将一个或多个换行符视为终止符(更喜欢更多),并让chomp将它们全部删除。这样每条记录总是以真实数据开始。

答案 2 :(得分:0)

Perl -n相当于在脚本周围包裹while(&lt;&gt;){}。假设您需要做的就是消除空行,您可以这样做:

#! /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 {}块中有很多代码,这很快就会达到限制回报的程度。