【发布时间】:2017-09-18 12:46:14
【问题描述】:
我正在尝试使用 Perl 修改文件的内容。
以下脚本运行良好。
#!/usr/bin/perl
use strict;
use warnings;
open(FH,"test.txt") || die "not able to open test.txt $!";
open(FH2,">","test_new.txt")|| die "not able to opne test_new.txt $!";
while(my $line = <FH>)
{
$line =~ s/perl/python/i;
print FH2 $line;
}
close(FH);
close(FH2);
test.txt的内容:
im learning perl
im in File handlers chapter
test_new.txt中的输出:
im learning python
im in File handlers chapter
如果我尝试使用相同的文件句柄来修改文件的内容,那么我不会得到预期的输出。以下是尝试执行此操作的脚本:
#!/usr/bin/perl
use strict;
use warnings;
open(FH,"+<","test.txt") || die "not able to open test.txt $!";
while(my $line = <FH>)
{
$line =~ s/perl/python/i;
print FH $line;
}
close(FH);
test.txt 中的输出不正确:
im learning perl
im learning python
chapter
chapter
如何使用单个文件句柄修改文件内容?
【问题讨论】:
-
实际上,您总是希望写入另一个文件,即使
perl -i -pe 's/perl/python/i' test.txt以这种方式工作。或者,您可以一次读取整个文件,进行更改并将整个文件写回同一个句柄。 -
@Сухой27 你能解释一下命令中选项的作用,即 -i -pe
-
这是文件句柄,不是处理程序。
-
你有完整的answer by ikegami,这是另一个post,也展示了如何保持相同的inode。
标签: perl filehandle