У меня есть целая группа файлов в каталоге, и из каждого файла я хочу удалить первую строку (включая возврат каретки). Я могу прочитать весь файл в массив строк и написать все, кроме первого элемента, в новый файл, но для меня это выглядит немного громоздким, есть ли лучшие способы? О, предпочтительным языком является 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
Похоже, вы не можете полностью обработать весь файл.