如果存在则查找和替换文件中的文本/如果使用Perl不存在则附加

时间:2014-03-26 08:51:41

标签: perl replace append

我需要一个打开并在文件中搜索特定字符串的Perl脚本,例如(foo1 = 10),如果存在则应将其替换为(foo1 = 5)如果它不存在则应将其附加到文件的结尾

由于

更新

到目前为止,这是我的代码:

#!/usr/bin/env perl
my $fileName   = $ARGV[0];
my $searchStr  = $ARGV[1];
my $replaceStr = $ARGV[2];
print( "\nFilename:",     $fileName,   "\n" );
print( "Search String:",  $searchStr,  "\n" );
print( "Replace String:", $replaceStr, "\n\n" );
open( FILE, $fileName );
  || die("Cannot Open File");
my (@fcont) = <FILE>;
close FILE;
open( FOUT, ">$fileName" ) || die("Cannot Open File");
foreach $line (@fcont) {
    $line =~ s/$searchStr/$replaceStr/g;
}
close FOUT;

我只需要一个计算替换次数的计数器,如果它等于零,则追加到文件末尾。

任何人都可以提供帮助,我们将非常感激

1 个答案:

答案 0 :(得分:4)

直接来自perlfaq5 - How do I change, delete, or insert a line in a file, or append to the beginning of a file?

在所有条件相同的情况下,我可能会使用Tie::File来解决这个问题。

use strict;
use warnings;

use Tie::File;

my $fileName   = $ARGV[0];
my $searchStr  = $ARGV[1];
my $replaceStr = $ARGV[2];

tie my @fcont, "Tie::File", $fileName;

my $count;
for (@fcont) {
    $count++ if s/\Q$searchStr/$replaceStr/;
}
push @fcont, $replaceStr if ! $count;