Как я могу удалить все, кроме последних 10 строк из файла? - PullRequest
13 голосов
/ 23 сентября 2010

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

tail -n 10 test.log

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

tail -n 10 test.log > test.log

не работает.

Ответы [ 5 ]

18 голосов
/ 23 сентября 2010

Вы можете сделать это, используя временный файл.

tail -n 10 test.log > test1.log

mv test1.log test.log
10 голосов
/ 10 июля 2015
echo "$(tail -n 10 test.log)" > test.log

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

1 голос
/ 24 апреля 2015

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

LOG=$(tail -n 10 test.log)
echo "$LOG" > test.log
1 голос
/ 24 сентября 2010
ruby -e 'a=File.readlines("file");puts a[-10..-1].join' > newfile
1 голос
/ 23 сентября 2010

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

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

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

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

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

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

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

...