Варианты этого вопроса, конечно, задавались несколько раз в разных местах, но я безуспешно пытаюсь удалить последние M
строки из файла.
Второй наиболее проголосовали ответ на этот вопрос рекомендует сделать следующее , чтобы избавиться от последней строки в файле:
head -n -1 foo.txt > temp.txt
Однако, когда я пробую это в OSX и Zsh, я получаю:
head: illegal line count -- -1
Это почему? Как я могу удалить M
последние строки и в первые N
строки данного файла?
head --version
? Какую систему вы используете?head --version
возвращает ошибку на самом деле.Ответы:
Вы можете удалить первые 12 строк с помощью:
(Это означает печать с 13-й строки.)
Некоторые реализации
head
какhead
поддержка GNU :но это не стандартно.
будет работать на тех системах, которые имеют
tail -r
(см. также GNUtac
), но является неоптимальным.Где
n
1:Вы также можете сделать:
удалить 2 строки, но это не оптимально.
Ты можешь сделать:
Но будьте осторожны, это не будет работать с большими значениями n с некоторыми
sed
реализациями.С
awk
:Чтобы удалить
m
строки с начала иn
с конца:источник
sed 'x;1d;$d'
может также использоваться для получения последних двух строк. И несколько парN
после1d
могут быть использованы, чтобы получить немного больше, хотя в этот момент это не дает никакого преимущества по сравнению сN;P;D
циклом, который вы уже рекомендовали.m
илиn
есть0
. В противном случае это было бы идеально.Вы можете использовать следующий способ для удаления первых N строк и последних M строк.
С
N=5
,M=7
и файлtest.txt
:Команда печатает все строки от N + 1 до LastLine-M.
Другой вариант - использовать Python:
источник
Вы можете удалить последние
M
(здесь M = 100) строки из файла с помощью:источник