当我尝试编辑文件时,为什么我的Perl脚本会删除整个文件的内容?

shu*_*ter 0 perl file

我正在运行以下代码来打开文件(测试)并编辑(搜索和替换)它.程序似乎打开文件,但不是替换它删除文件中的所有内容.我不确定为什么会这样.有人可以帮我从这里出去吗?

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

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

open (FILE, ">/home/shubhi/Desktop/pamlrun/test") || die "cant open file \n";
my @body = <FILE>;
foreach $line(@body)
{
(s/$find/$replace/g);
{
print FILE "$line";
}
}
close(FILE);
print "reached here\n";
exit;
Run Code Online (Sandbox Code Playgroud)

laa*_*lto 7

open(FILE, ">filename") 以替换模式打开文件,写下以前的文件.

此外,您不能在替换模式中使用正则表达式$replace.

如果我理解你的意图,可以用一行代替

perl -pi -e 's/(\s{6}seqfile\s=\sinfil)e/${1}2/' /home/shubhi/Desktop/pamlrun/test
Run Code Online (Sandbox Code Playgroud)


Bri*_*new 5

你的open()正在打开一个文件句柄来写入你的文件.更换

open (FILE, ">/home/shubhi/Desktop/pamlrun/test") || die "cant open file \n";
Run Code Online (Sandbox Code Playgroud)

open (FILE, "/home/shubhi/Desktop/pamlrun/test") || die "cant open file \n";
Run Code Online (Sandbox Code Playgroud)

在您发布的代码中,它会立即创建此文件以仅用于输出.您应该打开文件,读取/处理内容,然后将其写出来.如果文件大小合适,则在读取旧文件时写入文件,并在(成功)完成时替​​换旧文件.