Perl: как удалить первую строку файла без чтения и копирования всего файла

У меня есть целая группа файлов в каталоге, и из каждого файла я хочу удалить первую строку (включая возврат каретки). Я могу прочитать весь файл в массив строк и написать все, кроме первого элемента, в новый файл, но для меня это выглядит немного громоздким, есть ли лучшие способы? О, предпочтительным языком является Perl.

Ответ 1

Попробуйте этот один вкладыш

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

Я использовал его раньше, должен быть все, что вам нужно.

Ответ 2

Как насчет

tail +2

в оболочке?

(отредактируйте: в новом Linux вам может понадобиться tail -n +2 (спасибо, GNU!:())

Ответ 3

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

Это похоже на ответ stocherilac.

Но в любом случае (и во всех остальных ответах дано!) вы всегда читаете полный файл. Нет способа избежать этого, AFAIK.

Ответ 4

О, предпочтительным языком является Perl.

Иногда sed лучше sed, чем даже perl:

sed -i 1d *

Ответ 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;
}

Ответ 6

Как отметил Шверн, следующее не выполняет ранний выход, как я и думал изначально:

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

Похоже, вы не можете полностью обработать весь файл.