我一直试图让这个Perl脚本删除文件中的数字行,并且遇到了一些问题。我是一个Perl菜鸟,我只用它来做这个家庭作业。不过,我做了很多研究,这段代码看起来应该可行,但不是从包含
的文本文件中删除数字01现在是
02时间
03删除
04号码
我的脚本只删除整个文件内容。任何人都可以告诉我我的逻辑或语法有什么不对,或者它可能是什么?
#!/usr/bin/perl
open my $in, '<', "rmv_num_lines.txt" or die "Can't read from file.\n"; # open for reading
@array = <in>; # fill array with contents of file
open my $out, '>', "rmv_num_lines.txt" or die "Can't write to file.\n"; # open for writing
while( <$in> ){
foreach $item(@array){
if($item =~ /\d/){ # if line contains a digit
$item =~ s/\d/\n/; # erase digit, I think?
}
}
print $out $_; # print edited array into file
}
close $out;
答案 0 :(得分:4)
@array = <in>;
代替@array = <$in>;
!while (<$in>)
阅读文件时,它已被open '>'
破坏。s/\d/\n/
不只是删除一个数字;它在其位置添加了换行符。
#!/usr/bin/perl
use strict;
use warnings;
my $qfn = 'rmv_num_lines.txt';
open my $in_fh, '<', $qfn
or die "Can't open $qfn: $!\n";
my @lines = <$in_fh>;
open my $out_fh, '>', $qfn
or die "Can't create $qfn: $!\n";
for my $line (@lines) {
$line =~ s/^\d+ //;
print $out_fh $line;
}
作为一个单行:
perl -i -pe's/^\d+ //' rmv_num_lines.txt
答案 1 :(得分:2)
请你试试这个:
#!/usr/bin/perl
open(my $fh_in, '<', "rmv_num_lines.txt");
my $temp = ""; #Create temporarily Scalar Variable
while (<$fh_in>)
{
$_=~s/^\d+ //;
$temp .= $_; #Sequence storage in the temp variable
}
close($fh_in); #Close the file before Creating the same
open(my $fh_out, '>', "rmv_num_lines.txt");
print $fh_out $temp;