我只是想搜索一个字符串“Kumar”并用Mahi替换该字符串。但产出不会到来。任何身体都可以指出我在哪里做错了。
#!/usr/bin/perl -w
use strict;
open(my $fh, "+>","test.txt") || die "File not found";
my @lines = <$fh>;
my @newlines;
my $count;
foreach my $line(@lines) {
if($line =~/Kumar/i){
$line =~ s/Kumar/Mahi/ig;
print $fh $line;
#push(@newlines,$line);
$count++;
}
}
#print $fh @newlines;
close($fh);
Txt文件:
Kumar Yadav vivek Kumar Yadav
qualcomm Kumar Yadav tarun Kumar sumit
adbd Kumar shahi Kumar sinha
答案 0 :(得分:3)
我只是想搜索字符串“Kumar”并用Mahi替换该字符串
如果这只是你需要的,那么为什么不使用简单的单线?...
$ cat test.txt
line1
Kumar
Line2
Kumar
$ perl -i -p -e 's/Kumar/Mahi/g' test.txt
$ cat test.txt
line1
Mahi
Line2
Mahi
更新:在此帖子的生命周期内,问题标题和问题陈述已经彻底改变。因此,这个答案可能无法提供正确的解决方案。
答案 1 :(得分:3)
#!/usr/bin/perl
use strict;
use warnings;
$^I = "";
@ARGV = ("test.txt");
while (my $line = readline()) {
print $line if $line =~ s/Kumar/Mahi/ig;
}
来自perldoc
- $ ^ I
inplace-edit扩展的当前值。使用undef禁用就地编辑。 助记符:-i switch的值。
答案 2 :(得分:1)
open(my $fh, "+>","test.txt")
这会在打开时截断文件。所以当你来到阅读部分时没有什么可读的。
你应该首先用<
打开它,阅读它,关闭它,然后用>
打开它进行写作。
答案 3 :(得分:1)
open($fh, "<", "file.txt") or die "cannot open file:$!\n";
while( my $line = <$fh>){
$line =~ s/Kumar/Mahi/;
print $line ."\n";
}
close($fh);
答案 4 :(得分:0)
+&GT;意味着首先截断文件,然后开始阅读。最终你从文件中得不到任何东西。
+&LT;意味着阅读文件并更新。但是新文本将放在文件的末尾。
所以我想你的目的是,你需要两个独立的文件处理程序来进行读写操作。有关文件I / O的详细信息,请参阅here。