Ваш выбранный пример может быть не лучшим. Как уже отмечалось в комментариях, logrotate
- лучший инструмент для сохранения размеров файлов журнала; Более того, строка - не лучшая единица измерения размера. Эти комментаторы оба правы.
Однако я беру ваш вопрос за чистую монету и отвечаю на него.
Вы можете достичь желаемого с помощью встроенных командных оболочек, но гораздо быстрее и проще использовать внешний инструмент, такой как sed
. (awk
- это еще один вариант, но в нем отсутствует переключатель -i
, который в этом случае упрощает вашу жизнь.)
Итак, предположим, что ваш файл уже существует и называется script.log
затем
maxlines=1000
log_msg='Whatever the log message is'
sed -i -e1i"\\$log_msg" -e$((maxlines))',$d' script.log
делает то, что вы хотите.
-i
означает изменить данный файл на месте.
-e1i"\\$log_msg"
означает i nsert $log_msg
перед первой ( 1 ) строкой.
-e$((maxlines))',$d'
означает d выбор каждой строки от номера строки $((maxlines))
до последней ( $ ).