在文件顶部附加文本

dan*_*dan 8 shell perl

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

open (MYFILE, '>>data.txt');
print MYFILE "Title\n";
close (MYFILE)
Run Code Online (Sandbox Code Playgroud)

tad*_*dmc 9

 perl -pi -e 'print "Title\n" if $. == 1' data.text
Run Code Online (Sandbox Code Playgroud)

  • 优秀的单行,但应该注意的是,这仍然逐行循环遍历文件并将每个文件打印回原始文件。请参阅 http://oreilly.com/pub/h/73 以获取有关此用例的精彩文章。 (2认同)

Jus*_*ᚄᚒᚔ 8

您的语法略有弃用(谢谢,Seth):

open(MYFILE, '>>', "data.txt") or die $!;
Run Code Online (Sandbox Code Playgroud)

您必须完整传递文件并在现有文件内容之前写出所需的数据:

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);
Run Code Online (Sandbox Code Playgroud)

(无意中从Perl FAQ中窃取,然后修改)

这将逐行处理文件,以便在大文件上不会占用大量内存.但是,它并不是很快.

希望有所帮助.


Ken*_*Ken 7

有一个更简单的单行程序可以为每个文件添加一个文本块.比方说,你有一组命名的文件body1,body2,body3等,对要在前面加上包含在一个名为文本块标题:

cat header | perl -0 -i -pe 'BEGIN {$h = <STDIN>}; print $h' body*
Run Code Online (Sandbox Code Playgroud)