Формат вывода "yum provide"

Формат вывода "yum provide"

Я пишу небольшую программу, которая упаковывает файлы конфигурации в формате RPM и помещает ряд %триггеров для управления установкой/обновлением пакетов, которые приносят копию/версию одного и того же файла.

Я застрял, пытаясь отформатировать вывод yum. Вывод по умолчанию:

# yum provides */named.conf -q
32:bind-chroot-9.8.2-0.17.rc1.el6_4.6.i686 : A chroot runtime environment for the ISC BIND DNS server, named(8)
Repo        : base
Matched from:
Filename    : /var/named/chroot/etc/named.conf


sblim-cmpi-dns-test-1.0-1.el6.i686 : SBLIM WBEM-SMT Dns - Testcase Files
Repo        : base
Matched from:
Filename    : /usr/share/sblim-testsuite/named.conf

Но мне нужно только имя пакета. Использование cutне кажется хорошей идеей. Разделителем будет -, но есть несколько пакетов с - в середине имени пакета.

В идеале мне нужно, чтобы вывод можно было форматировать, как для запросов rpm:

rpm -qa --queryformat "%{NAME}\n"
make
rubygem-multi_json
attr
ncurses-base
rubygem-rack-test
strace
rubygem-polyglot
gpg-pubkey
rubygem-journey
tzdata
...

решение1

Вы будете счастливее, если откажетесь yumот repoqueryкоманды из yum-utilsпакета. С этим вы просто запускаете:

$ repoquery --whatprovides '*/named.conf' --qf '%{NAME}'

Что в моей системе возвращает:

bind
sblim-cmpi-dns-test
bind
bind-chroot
rubygem-openshift-origin-dns-bind
system-config-bind
logwatch
bind-chroot

решение2

Я придумал ужасное решение этой проблемы, используя различные команды yum, sed, grep и cut:

PKLIST=`yum provides -q */$FILE | grep -v 'Repo\|Matched\|Filename' | sed "s/32://g" | cut -d':' -f1 | sed "s/ //g" | grep -e '^$' -v`
array=($PKLIST)
arr2=()
for i in "${array[@]}"
do
        x=`yum info -C $i | grep "Name        :" | sed "s/Name        : //g"`
        arr2+=($x)
done

Затем я удалил дубликаты из массива.

arr3=$(echo "${arr2[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')

С моими текущими знаниями Bash это лучшее, что я мог сделать.

Связанный контент