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

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

Ответы [ 6 ]

24 голосов
/ 10 июня 2010

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

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

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

11 голосов
/ 10 июня 2010

Как насчет

tail +2

в оболочке?

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

9 голосов
/ 10 июня 2010

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

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

sed -i 1d *
9 голосов
/ 10 июня 2010
perl -n -i -e 'print unless $. == 1' myfile

Это похоже на ответ Сточерилака.

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

5 голосов
/ 10 июня 2010
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;
}
0 голосов
/ 11 июня 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...