我正在运行以下代码来打开文件(测试)并编辑(搜索和替换)它.程序似乎打开文件,但不是替换它删除文件中的所有内容.我不确定为什么会这样.有人可以帮我从这里出去吗?
#!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)
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)
你的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)
在您发布的代码中,它会立即创建此文件以仅用于输出.您应该打开文件,读取/处理内容,然后将其写出来.如果文件大小合适,则在读取旧文件时写入新文件,并在(成功)完成时替换旧文件.
| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |