在文件顶部附加文本

时间:2011-05-26 15:27:53

标签: shell perl

我想在data.txt文件的顶部添加一个文本,此代码在文件末尾添加文本。我如何修改此代码以在data.txt文件的顶部写入文本。提前感谢您的任何帮助。

open (MYFILE, '>>data.txt');
print MYFILE "Title\n";
close (MYFILE)

6 个答案:

答案 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'文件名,打印答案一次