我想在data.txt文件的顶部添加一个文本,此代码在文件末尾添加文本。我如何修改此代码以在data.txt文件的顶部写入文本。提前感谢您的任何帮助。
open (MYFILE, '>>data.txt');
print MYFILE "Title\n";
close (MYFILE)
答案 0 :(得分:9)
perl -pi -e 'print "Title\n" if $. == 1' data.text
答案 1 :(得分:8)
你的语法略微偏离已弃用(谢谢,Seth):
open(MYFILE, '>>', "data.txt") or die $!;
您必须完整传递文件并在现有文件内容之前写出所需数据:
open my $in, '<', $file or die "Can't read old file: $!";
open my $out, '>', "$file.new" or die "Can't write new file: $!";
print $out "# Add this line to the top\n"; # <--- HERE'S THE MAGIC
while( <$in> ) {
print $out $_;
}
close $out;
close $in;
unlink($file);
rename("$file.new", $file);
(无意中从Perl FAQ被盗,然后被修改)
这将逐行处理文件,以便在大文件上不会占用大量内存。但是,它并不是很快。
希望有所帮助。
答案 2 :(得分:7)
有一个更简单的单行程序可以为每个文件添加一个文本块。假设您有一组名为 body1 , body2 , body3 等的文件,您希望在其中添加一个包含在其中的文本块一个名为标题的文件:
cat header | perl -0 -i -pe 'BEGIN {$h = <STDIN>}; print $h' body*
答案 3 :(得分:2)
附加到顶部通常称为前置。
open(M,"<","data.txt");
@m = <M>;
close(M);
open(M,">","data.txt");
print M "foo\n";
print M @m;
close(M);
交替打开data.txt-进行写入,然后在关闭后将data.txt-移动到data.txt,这样做具有原子性,因此中断不会使data.txt文件被截断。
答案 4 :(得分:2)
请参阅有关此主题的Perl FAQ Entry
答案 5 :(得分:0)
perl -ni -e'打印“标题\ n”$。== 1'文件名,打印答案一次