Подтвердить что ты не робот

Как удалить все, кроме последних 10 строк из файла?

Можно ли сохранить только последние 10 строк строк с помощью простой команды оболочки?

tail -n 10 test.log

предоставляет правильный результат, но я не знаю, как изменить сам test.log. И

tail -n 10 test.log > test.log

не работает.

4b9b3361

Ответ 1

Вы можете сделать это, используя tempfile.

tail -n 10 test.log > test1.log

mv test1.log test.log

Ответ 2

echo "$(tail -n 10 test.log)" > test.log

Важные цитаты. Они сохраняют символы новой строки.

Ответ 3

Вызов команды ed (текстовый редактор):

 echo -e '1,-10d\nwq' | ed <filename>

Это приведет к отправке команды для удаления строк ('1, -10d'), сохранения файла ('w') и выхода ('q').

Также обратите внимание, что ed failed (код возврата равен 1), когда входной файл имеет менее 11 строк.

Изменить: Вы также можете использовать редактор vi (или команду ex):

vi - +'1,-10d|wq' <filename>

Но если входной файл имеет 10 или меньше строк, редактор vi останется открытым, и вы должны ввести ': q' для выхода (или 'q' с командой ex).

Ответ 4

ruby -e 'a=File.readlines("file");puts a[-10..-1].join' > newfile

Ответ 5

Также вы можете использовать переменную:

LOG=$(tail -n 10 test.log)
echo "$LOG" > test.log