English 中文(简体)
在我试图篡改档案时,我用的手稿为什么删除整个档案的内容?
原标题:
  • 时间:2009-06-02 18:59:35
  •  标签:

我正在执行以下法典,以开启档案(测试)和编辑(研究和替换)。 方案似乎打开了档案,而不是取而代之,删除档案中的所有内容。 我不肯定为什么发生这种情况。 谁能帮助我来这里?

#!use/bin/perl
use strict;
use warnings;

my $line = $ARGV[0];
my $find =  s{6}seqfiles=sinfile ;
my $replace =  s{6}seqfiles=sinfil2 ;

open (FILE, ">/home/shubhi/Desktop/pamlrun/test") || die "cant open file 
";
my @body = <FILE>;
foreach $line(@body)
{
(s/$find/$replace/g);
{
print FILE "$line";
}
}
close(FILE);
print "reached here
";
exit;
最佳回答

您的开放式正在打开一个文件,以便写到你的档案中。 替换

open (FILE, ">/home/shubhi/Desktop/pamlrun/test") || die "cant open file 
";

iii

open (FILE, "/home/shubhi/Desktop/pamlrun/test") || die "cant open file 
";

在你公布的法典中,它立即只为产出创建这一档案。 您应公开文件,读/处理内容,然后将其写出。 如果卷宗是可查的,则在阅读旧文件时写到new>/em>文档,并在(成功)完成后替换旧文件。

问题回答

open(FILE,“>filename”> 开放文档,以替代方式,在以前任何时候书写。

另外,在替代模式<代码>下,你不能使用

如果我正确理解你的意图,可以改为一行。

perl -pi -e  s/(s{6}seqfiles=sinfil)e/${1}2/  /home/shubhi/Desktop/pamlrun/test

它看着你想要在现场编辑神论。 这样做的最容易的方法是使用<代码>$I和+<>(I/Otors section:

#!/usr/bin/perl

use strict;
use warnings;

my $find = qr/s{6}seqfiles=sinfile/;
my $replace =        seqfile = infil2 ;

@ARGV = ("/home/shubhi/Desktop/pamlrun/test");

$^I = ".bak"; #safe the old files as file.bak

while (<>) {
    s/$find/$replace/g;
    print;
}

此外,鉴于您的舱面性质,它看起来像你可能想要的<代码>[ ](mch aspace)或(match a tab)而不是s

您也可使用,但似乎提供后备能力:

#!/usr/bin/perl

use strict;
use warnings;

use Tie::File;

my $find = qr/s{6}seqfiles=sinfile/;
my $replace =        seqfile = infil2 ;

tie my @lines, "Tie::File", "testdata"
    or die "could not open file: $!";

for my $line (@lines) {
    $line =~ s/$find/$replace/g;
}

当然,你可以把自己的支持推向File:Copy:

#!/usr/bin/perl

use strict;
use warnings;

use Tie::File;
use File::Copy;

my $find = qr/s{6}seqfiles=sinfile/;
my $replace =        seqfile = infil2 ;

copy "testdata", "testdata.bak"
    or die "could not backup file: $!";

tie my @lines, "Tie::File", "testdata"
    or die "could not open file: $!";

for my $line (@lines) {
    $line =~ s/$find/$replace/g;
}

如果我没有指出,这基本上是一个方面的话,我也会被拒:

perl -pi.bak -e  s/s{6}seqfiles=sinfile/      seqfile = infil2/  testdata

利用K(0-width positive look-behind):

perl -pi.bak -e  s/s{6}seqfiles=sKinfile/infil2/  testdata

open for write = > open for read = <





相关问题