Perl: Как я удаляю первую строку файла, не читая и копируя целый файл

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

14
задан friedo 10 June 2010 в 17:19
поделиться

6 ответов

Попробуйте этот лайнер

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

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

24
ответ дан 1 December 2019 в 06:03
поделиться

Как насчет

tail +2

в shell?

(edit: в более новых Linux вам может понадобиться tail -n +2 (спасибо, GNU! :( ))

11
ответ дан 1 December 2019 в 06:03
поделиться

О, предпочтительный язык - Perl.

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

sed -i 1d *
9
ответ дан 1 December 2019 в 06:03
поделиться
perl -n -i -e 'print unless $. == 1' myfile

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

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

9
ответ дан 1 December 2019 в 06:03
поделиться
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 December 2019 в 06:03
поделиться

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

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

Похоже, что один ] не может в конце концов избежать обработки всего файла.

-1
ответ дан 1 December 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: