格式化“yum 提供”輸出

格式化“yum 提供”輸出

我正在編寫一個小程序,將配置文件打包為 rpm,它放置了一系列 %triggers 來處理帶來相同文件的副本/版本的軟體包的安裝/升級。

我在嘗試格式化 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 知識,這是我能做的最好的事。

相關內容