инструкции для определения того, какие пакеты [rpm] были установлены из какого репозитория из этого
Список всех пакетов RPM, установленных из репозитория «X»
Увидев amzn1 , я пришел к выводу, что у вас есть репозиторий Amazon Web Service (AWS )и вы установили кучу всего *amzn1.x86_64
оттуда.
CentOS недавно обновился с 7.6 до 7.7, и, вероятно, репозиторий AWS конфликтует с CentOS 7.7.
Я не знаком с AWS и тем, что они могут предложить для Centos, но здесь проблема именно в них. Решение состоит в том, чтобы удалить все, что связано с amzn
, и отключить их репозиторий вместе с любыми другими репозиториями, кроме базовых репозиториев CentOS и EPEL, это будет типичной процедурой, когда происходит что-то подобное... вернуться к работе системные базовые репозитории, пока из базового репозитория все не заработает должным образом. Неудивительно, поскольку некоторые другие репозитории для различных пакетов конфликтовали с обновлением Centos 7.7.
Это не поддерживается явно встроенным синтаксисом -в bash
, но его можно легко реализовать с помощью небольшой подстановки переменных и некоторой рекурсии.
function do_something {
echo $1 $2
}
function handlematches {
regex='\((Closes|Resolves):\s([0-9]+)\)'
msg=$1
if [[ $msg =~ $regex ]] ; then
action="${BASH_REMATCH[1]}"
issue="${BASH_REMATCH[2]}"
do_something "$action" "$issue"
# Remove the first regex match and try again
handlematches "${msg/${BASH_REMATCH[0]}/}"
fi
}
message='Fixed a problem (Closes: 1234), (Resolves: 5678)'
handlematches "$message"
Выход:
Closes 1234
Resolves 5678
Аналогично ответу Стюарта , но с использованием итеративного, а не рекурсивного подхода:
regex='\((Closes|Resolves): ([0-9]+)\)'
msg='Fixed a problem (Closes: 1234), (Resolves: 5678)'
while [[ $msg =~ $regex ]]; do
action=${BASH_REMATCH[1]}
issue=${BASH_REMATCH[2]}
do_something "$action" "$issue"
msg=${msg/"${BASH_REMATCH[0]}"/}
done
Это перебирает строку в $msg
до тех пор, пока регулярное выражение не перестанет соответствовать. На каждой итерации соответствующий бит удаляется с помощью замены параметра bash
.
Если вы хотите сохранить оригинал $msg
, сначала сделайте его копию в другой переменной.
С
do_something () {
printf 'action=%s, issue=%s\n' "$1" "$2"
}
этот вывод
action=Closes, issue=1234
action=Resolves, issue=5678