Что ж, этот вопрос меня щекочет со вчерашнего дня, когда я впервые прочитал ваш пост.
Как правило, эти две версии apt-get install совпадают, согласно справочным страницам apt-get.
На практике эти две версии действительно идентичны, когда вы пытаетесь установить один или несколько пакетов с известным именем.
Но если вы попытаетесь установить несколько пакетов с использованием подстановочных знаков, я смогу заметить некоторые различия.
Эта команда не работает:
apt-get install -s mate*/testing
Хотя эта команда работает нормально:
apt-get install -s -t testing mate*
Похоже, что mate * / testing выполняет поиск из всех пакетов, содержащих mate, и пытается установить все пакеты thos из тестового репозитория. Если некоторые пакеты недоступны в тестовом репозитории, вы получите сообщение об ошибке и apt-get завершится ошибкой.
С другой стороны, параметр -t test mate * выбирает пакеты mate *, доступные только в репозитории для тестирования. Он не пытается искать и устанавливать пакеты mate *, которые недоступны в тестовом репозитории, и поэтому не дает сбоев.
Вы можете попробовать, если хотите использовать вышеуказанные команды, используя опцию -s (simulate), которая позволяет вам видеть все сообщения apt-get в вашем терминале, как если бы они появлялись при реальной установке (но на самом деле ничего не установлены).
PS: Существует также очевидная и незначительная разница между двумя версиями: Работая с версией "/ release", вы можете комбинировать (если хотите) различные пакеты из разных / релизов, а с " -t release "версия, вы устанавливаете глобально выпуск, который будет применяться ко всем пакетам, которые будут следовать за apt-get install.
Предполагая, что запись начинается, когда в первом столбце есть текст, вы можете изменить эти три записи с помощью
awk '/^[A-Z]/ { substitute = ($1 ~ /^((SAP|GOLD)_PROD|EVENTS_SAP)$/) }
substitute { sub(/sape-scan/, "sapi-scan") }1' tnsnames.ora >tnsnames.new
Awk обрабатывает каждую строку из входной строки по сценарию, т.е. текст в одинарных кавычках представляет собой небольшую программу, которая применяется к каждой строке в вашем файле.
В этом скрипте переменная substitute
получает логическое значение, указывающее, соответствует ли строка заголовка регулярному выражению. Если логическое значение истинно, мы выполняем замену в каждой строке, пока не увидим другую строку заголовка, и значение логического значения снова оценивается и, возможно, обновляется.Одинокий 1
заставляет печатать каждую строку.
Результат помещается в новый файл, так что вы можете diff
и т. д. по сравнению с оригиналом. Если вы удовлетворены результатом, вы можете заменить старый файл, простоmv
:присвоив новому файлу имя старого файла.
Другой вариант, с sed:
sed -re '/^(SAP_PROD|GOLD_PROD|EVENTS_SAP) =/,/^$/s/HOST = sape-scan/HOST = sapi-scan/' tnsnames.ora
-r
)для |
чередования регулярных выражений -e
)Используйте приведенную выше версию, чтобы не -неразрушающее тестирование ваших изменений, возможно, с помощью:
sed... tnsnames.ora > tnsnames.new
diff tnsnames.ora tnsnames.new
... чтобы посмотреть, что изменилось. Во многих реализациях sed вы можете добавить флаг -i
, чтобы затем внести изменения «на месте -».