Perl:如何在不读取和复制整个文件的情况下删除文件的第一行

时间:2010-06-10 17:13:11

标签: perl line

我确实在目录中有一大堆文件,并且每个文件都要删除第一行(包括回车符)。我可以将整个文件读入一个字符串数组,并将除了第一个元素之外的所有元素写入一个新文件,但这对我来说看起来有点麻烦有更好的方法吗?哦,首选的语言是Perl。

6 个答案:

答案 0 :(得分:24)

试试这个衬垫

perl -pi -e '$_ = "" if ( $. == 1 );' filename

我以前用过它,应该就是你所需要的。

答案 1 :(得分:11)

怎么样

tail +2

在shell中?

(编辑:在较新的Linux中你可能需要tail -n +2(谢谢你,GNU!:())

答案 2 :(得分:9)

perl -n -i -e 'print unless $. == 1' myfile

这与stocherilac的答案类似。

但是,无论如何(在所有其他答案中给出了答案!),你总是在阅读完整的文件。无法避免这种情况,AFAIK。

答案 3 :(得分:9)

哦首选语言是Perl。

有时sed比perl更好sed

sed -i 1d *

答案 4 :(得分:5)

use Tie::File qw();
for my $filename (glob 'some_where/some_files*') {
    tie my @file, 'Tie::File', $filename or die "Could not open $filename: $!";
    shift @file;
}

答案 5 :(得分:-1)

正如Schwern指出的那样, 按照我原先的想法执行提前退出:

perl -pi -e '$_ = q// and last if $. == 1;' myFile

似乎一个无法完全避免处理整个文件。