Как я могу отбросить последние n строк файла с помощью фильтра командной строки unix?
Это было бы как бы наоборот tail
: tail
отбрасывает первые n строк, но пропускает остальные, но я хочу, чтобы команда передавала все, кроме последних n строк.
К сожалению, я не нашел ничего подобного - head
тоже не помогает. РЕДАКТИРОВАТЬ : по крайней мере в Solaris это не принимает отрицательные аргументы.
Обновление: меня больше всего интересует решение, которое работает с большими файлами, то есть с лог-файлами, где вы можете проверить, что произошло в последние минуты.
Ответы:
Если у вас есть GNU
head
, вы можете использоватьраспечатать все, кроме последних 5 строк
file.txt
.Если не
head -n
принимает отрицательных аргументов, попробуйтеисточник
file.txt
длиной не менее шести строк ...)head
, возвращается пустой вывод без ошибок.источник
Вот простой способ удалить последнюю строку, которая работает на BSD и т. Д.
Выражение гласит «в последней строке, удалите его». Другие строки будут напечатаны, так как это
sed
поведение по умолчанию.Вы можете связать их вместе, чтобы удалить несколько строк
Правда, это немного жестко, но делает только один просмотр файла.
Вы также можете взглянуть на это, чтобы получить дополнительные ответы: https://stackoverflow.com/questions/13380607/how-to-use-sed-to-remove-last-n-lines-of-a-file
Вот одна строка, адаптированная из одного из моих любимых там:
Мне было весело расшифровывать это, и я надеюсь, что и вы тоже (: Он выполняет буферизацию
N
строк при сканировании, но в остальном довольно эффективен.источник
Мне любопытно, почему вы думаете, что
head
это не вариантЭто, кажется, соответствует вашей цели, используя, например:
источник
head
. BSDhead
не имеет этой опции, поэтому этот ответ не будет работать в Solaris или других Unix-системах без GNU coreutils. ОП специально пометил это с помощью Unix и Unix-Utils.Еще один способ сделать это, если
tail -n
не принимать отрицательные аргументыЭто удалит последние 5 строк
источник