В частности, для sed вы можете использовать аргумент -i in-place. Он просто сохраняет исходный файл, например:
sed -i 's/ /-/g' filename
Если вы хотите сделать что-то более жесткое, если вы делаете больше, чем sed, да, вы можете буферизировать все это с помощью sponge (из пакета moreutils), который будет «впитывать» весь stdin перед записью в файл. Это похоже на tee, но с меньшей функциональностью. Однако для базового использования это в значительной степени замена:
cat file | some_sed_command | sponge file >/dev/null
Это безопаснее? Определенно. Вероятно, у него есть ограничения, поэтому, если вы делаете что-то колоссальное (и не можете редактировать на месте с помощью sed), вы можете захотеть сделать свои изменения во втором файле, а затем mv вернуть этот файл к исходному имени файла. Это должно быть атомарным (так что все, что зависит от этих файлов, не будет ломаться, если им нужен постоянный доступ).
Повторная установка python3-minimal, которая предоставляет py3clean, может позволить процессу завершить работу. dist-upgrade может потребоваться, если проблемы сохраняются после первых четырех команд. См. Зачем использовать apt-get update вместо apt-get dist-upgrade?
sudo apt-get install --reinstall python3-minimal
sudo apt-get update
sudo apt-get upgrade
sudo apt-get -f install
Учитывая дополнительные постоянные ошибки, может потребоваться несколько более агрессивное исправление. Используйте либо Зачем использовать apt-get update вместо apt-get dist-upgrade? или Command-line foo, используя netselect, чтобы перейти на другое зеркало. Зеркало LANET является вероятным кандидатом, но см. Официальные архивные зеркала для Ubuntu для дополнительных параметров. Команда mv переместит ваши текущие списки и текущие источники в /tmp, где они могут быть восстановлены, если что-то пойдет не так в следующих шагах. Команда apt-get clean очистит все загруженные архивы пакетов. apt-get update будет заполнять ваши apt-списки на основе ваших исходных файлов. apt-get dist-upgrade в дополнение к выполнению функции обновления, также разумно обрабатывает изменения зависимостей с новыми версиями пакетов.
mkdir -p /tmp/apt/lists
mkdir -p /tmp/etc/apt/source.list.d
sudo mv /var/lib/apt/lists/* /tmp/apt/lists/
cp /etc/apt/source.list.d/* /tmp/etc/apt/source.list.d/
cp /etc/apt/source.list /tmp/etc/apt/
# change mirrors with one of the method mentioned above then continue.
sudo apt-get clean
sudo apt-get update
sudo apt-get dist-upgrade
Повторная установка python3-minimal, которая предоставляет py3clean, может позволить процессу завершить работу. dist-upgrade может потребоваться, если проблемы сохраняются после первых четырех команд. См. Зачем использовать apt-get update вместо apt-get dist-upgrade?
sudo apt-get install --reinstall python3-minimal
sudo apt-get update
sudo apt-get upgrade
sudo apt-get -f install
Учитывая дополнительные постоянные ошибки, может потребоваться несколько более агрессивное исправление. Используйте либо Зачем использовать apt-get update вместо apt-get dist-upgrade? или Command-line foo, используя netselect, чтобы перейти на другое зеркало. Зеркало LANET является вероятным кандидатом, но см. Официальные архивные зеркала для Ubuntu для дополнительных параметров. Команда mv переместит ваши текущие списки и текущие источники в /tmp, где они могут быть восстановлены, если что-то пойдет не так в следующих шагах. Команда apt-get clean очистит все загруженные архивы пакетов. apt-get update будет заполнять ваши apt-списки на основе ваших исходных файлов. apt-get dist-upgrade в дополнение к выполнению функции обновления, также разумно обрабатывает изменения зависимостей с новыми версиями пакетов.
mkdir -p /tmp/apt/lists
mkdir -p /tmp/etc/apt/source.list.d
sudo mv /var/lib/apt/lists/* /tmp/apt/lists/
cp /etc/apt/source.list.d/* /tmp/etc/apt/source.list.d/
cp /etc/apt/source.list /tmp/etc/apt/
# change mirrors with one of the method mentioned above then continue.
sudo apt-get clean
sudo apt-get update
sudo apt-get dist-upgrade