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

Joh*_*ohn 2 regex string perl file

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

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

谢谢..

Sin*_*nür 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;
Run Code Online (Sandbox Code Playgroud)

请注意以下事项:

  • use strict 将帮助您捕获编程错误.
  • use warnings 会提醒你可疑的结构.
  • Bareword文件句柄,例如SARAN包全局变量.使用词法文件句柄.
  • 首选三参数形式open,特别是如果文件名不是硬编码的话.
  • 在错误消息中包含文件名.
  • 既然你没有的Chomp ING $line,print "$line\n"将导致新行加倍.


cod*_*ict 7

你可以做:

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

我们使用Perl的替换运算符 s,它允许我们使用正则表达式找到匹配并替换与另一个字符串匹配的字符串部分.

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

  • ^ 是开始锚.
  • \s 是任何空白字符.
  • + 用于标记一个或多个的量词

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