У меня действительно есть целый набор файлов в каталоге, и из каждого файла я хочу удалить первую строку (включая возврат каретки). Я могу считать целый файл в массив строк и записать всем кроме первого элемента в новый файл, но это выглядит немного громоздким мне, там лучшие пути? О, предпочтенный язык является Perl.
Попробуйте этот лайнер
perl -pi -e '$_ = "" if ( $. == 1 );' filename
Я использовал его раньше, это должно быть все, что вам нужно.
Как насчет
tail +2
в shell?
(edit: в более новых Linux вам может понадобиться tail -n +2
(спасибо, GNU! :( ))
О, предпочтительный язык - Perl.
Иногда sed
лучше sed
, чем даже perl:
sed -i 1d *
perl -n -i -e 'print unless $. == 1' myfile
Это похоже на ответ stocherilac.
Но в любом случае (и во всех других приведенных ответах!) вы всегда читаете полный файл. Никакого способа избежать этого, AFAIK.
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;
}
Как указал Шверн, следующее не выполняет ранний выход, как я первоначально думал:
perl -pi -e '$_ = q// and last if $. == 1;' myFile
Похоже, что один ] не может в конце концов избежать обработки всего файла.