Ни стандарт sed
, ни awk
не поддерживают редактирование на месте.
Для этого лучше использовать ed(1)
илиex(1)
:
printf '$-%dd\nw\n' 1 | ed -s your_file
Или здесь -документ
ed -s <<'EOT' your_file
$-1d
w
EOT
С расширенными оболочками, такими как bash
, zsh
или ksh93
, вы можете использовать синтаксис $'...'
и здесь -строки:
ed -s <<<$'$-1d\nw' your_file
Обратите внимание, что адрес $
означает последнюю строку файла; поэтому индекс 1 есть 0 -на основе ; для 1-й строки от конца замените 1 на 0 ($-0
), для 3-й на 2($-2
)и т. д.
Помещение в функцию:
del_nth_line_from_end(){ printf '$-%dd\nw\n' "$(($2-1))" | ed -s "$1"; }
Вместо ed -s
везде можно использовать ex -s
или vim -es
.
Эта ошибка не должна препятствовать обновлению; другие репозитории все еще обновляются. apt upgrade
должно позволить вам выполнить обновление.
Однако «buster/updates» не существует в основных репозиториях, поэтому вы можете удалить его; отредактируйте /etc/apt/sources.list
и удалите строку ftp.hu.debian.org/debian buster/updates
. Пока вы это делаете, убедитесь, что у вас есть строка security.debian.org
— я подозреваю, что ошибка buster/updates
возникает из-за изменения, внесенного в эту:
deb http://security.debian.org buster/updates main
Ваш файл /etc/apt/sources.list
должен закончиться следующим образом:
deb http://ftp.hu.debian.org/debian/ buster main non-free contrib
deb-src http://ftp.hu.debian.org/debian/ buster main non-free contrib
deb http://security.debian.org/ buster/updates main contrib non-free
deb-src http://security.debian.org/ buster/updates main contrib non-free
deb http://ftp.hu.debian.org/debian/ buster-updates main contrib non-free
deb-src http://ftp.hu.debian.org/debian/ buster-updates main contrib non-free