Я использую следующий скрипт bash, чтобы удалить все, кроме последних 'x' строк в файле журнала:
#!/bin/bash
# Script to write to the log file every minute and delete all but the last
# set time in hours
echo `date +\%Y\%m\%d\%H\%M\%S`,`/home/pi/temp/temp` >> /home/pi/temp/temp.log
HOURS="12" #Nr of hours in the log
LINES=$(( $HOURS * 60 + 1 )) #Nr of minutes/lines in the log
echo $LINES #Included just for testing if i'm getting the desired amount of lines
sed -e :a -e '$q;N;$LINES,$D;ba' temp.log >temp1.log ;mv temp1.log temp.log
Я заменил значение $ LINES (12 часов) на 721, и скрипт работает как задача cron, запускается каждую минуту без ошибок, поэтому я уверен, что ошибка в той части, которая включает переменную в sed.
Кроме того, я просто скопировал это с какого-то веб-сайта, если кто-то может быть достаточно любезен, чтобы объяснить мне, что происходит в команде sed, возможно, я смог бы сам разобраться в ошибке.
Это ошибка:
sed: -e expression #2, char 8: extra characters after command.
Кроме того, он удаляет все строки в файле.