У вас есть четыре вещи, которые вы пытаетесь выполнить :1 )вставка строки в начало файла, 2 )чтение определенной строки файла, 3 )условное ветвление, если это конкретной строки не существует, и 4 )удаление определенной строки файла.
Вы можете использовать утилиту редактора потоков sed
, чтобы сделать все это. Я предполагаю, что GNU sed
в своем ответе, но точный синтаксис может немного отличаться от других версий sed
.
Чтобы вставить строку в начало файла:
sed -i "1i\${date}" ${oldlog}
Опция -i
указывает sed
работать с файлом на месте. 1
указывает sed
работать только с первой строкой. i\
говорит sed
вставить перед строкой.
Для извлечения 21-й строки:
del="$(sed -n 21p "${oldlog}")"
-n
переводит sed
только в тихий режим, поэтому единственным выводом является то, что явно напечатано. 21
— номер строки, а p
— команда печати.
Чтобы определить, есть ли 21-я строка:
sed -n 21q1 ${oldlog}
Снова -n
переводит sed в тихий режим, 21
выбирает 21-ю строку, q
указывает sed выйти, а 1
является кодом выхода.
Удаление 21-й строки:
sed -i 21d ${oldlog}
Опять же, -i
для работы с файлом на месте, 21
выбирает строку 21 и d
удаляет строку.
Собираем все воедино:
sed -i "1i\${date}" ${oldlog}
del="$(sed -n 21p "${oldlog}")"
sed -n 21q1 ${oldlog} || { echo "Deleting ${dest}/old/${del}" && rclone purge "${dest}/old/${del}" && sed -i 21d ${oldlog} }
На момент написания GCC -11.2.0 доступен для установки в виде пакета для всех основных архитектур. Пожалуйста, прочтите соответствующий раздел часто задаваемых вопросов по OpenBSD для получения подробной информации об использовании системы пакетов.