在Perl中,如何打印从文件中读取的行,并删除了可选的前导空格?

时间:2010-09-17 11:49:54

标签: regex perl file string

#!/usr/bin/perl 
open(SARAN,"first.txt") or die "Can't Open: $!\n";
while($line=<SARAN>)
{ 
print "$line\n";
} 
close SARAN;

您好, 在上面的perl脚本中,我需要一个功能...... 在first.txt中,每一行都以前面的一些空格开头。 我需要打印前面没有空格的线条...... 怎么做。

感谢..

3 个答案:

答案 0 :(得分:8)

您的问题含糊不清:您是否要打印无法启动的行 在删除任何前导空格后,用空格或打印所有行?

@codaddict展示了如何做到后者。我将展示如何做前者:

#!/usr/bin/perl 

use strict;
use warnings;

open my $SARAN, '<', "first.txt" 
    or die "Can't open 'first.txt': $!";

while (my $line = <$SARAN>) 
{ 
    print $line unless $line =~ /^\s/;
} 

close $SARAN;

请注意以下事项:

  • use strict会帮助您抓住 编程错误。
  • use warnings会提醒您 可疑的结构。
  • 诸如SARAN之类的Bareword文件句柄是包全局变量。使用词汇 文件句柄。
  • 首选open的三参数形式,特别是如果文件名是。{ 没有硬编码。
  • 在错误消息中包含文件名。
  • 因为你不是chomp $lineprint "$line\n"会导致换行增加一倍。

答案 1 :(得分:7)

你可以这样做:

while($line=<SARAN>) { 
  $line=~s/^\s+//;  # delete the leading whitespace.
  print "$line\n";
}

我们使用Perl's substitute operator s,它允许我们使用正则表达式查找匹配项,并替换与另一个字符串匹配的字符串部分。

我们在这里使用正则表达式^\s+

  • ^是起始锚。
  • \s是任何空格字符。
  • +量词标记一个或多个

基本上我们匹配并替换前导的一个或多个空白字符,没有任何有效意味着删除它们。

答案 2 :(得分:0)

#!/usr/bin/perl

 open(SARAN,"first.txt") or die "Can't Open: $!\n";

 @line=< SARAN>;

 $str_line = join("", @line);

 print(SARAN "$str_line");

 close SARAN;