搜索并替换同一文件中的字符串并计算替换的数字

时间:2013-12-20 09:00:13

标签: perl

我只是想搜索一个字符串“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

5 个答案:

答案 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

相关问题