Isso é perto:
rpm -q --whatprovides "foo = 2"
mas não aceita uma versão. Para conseguir isso, volte um passo e formate a saída de
rpm -q --whatprovides foo
assim:
rpm -q --queryformat "%{VERSION}:%{NAME}\n" --whatprovides foo
e filtre o resultado por grep (para selecionar seu "2"), e depois por sed, para remover a versão extra seguida por dois-pontos:
grep -E '/^2:/' | sed -e 's/^[^:]*://'
Isso dá apenas o nome do pacote. Na prática, você desejaria a versão, o release e a arquitetura para instalar a dependência correta.
Para referência: 5.2.5. Determinar qual pacote fornece uma certa capacidade (Guia do Fedora RPM)
Em relação ao comentário do OP, o awk seria mais simples:
awk -F: '{ if ($1 == "2") print $2}'
Eu concordo (mas pelo hábito de trabalhar em scripts de configuração, use o segundo do awk para o grep / sed, já que ele é um pouco menos portátil). No entanto, se alguém quisesse verificar pacotes com versões maiores ou iguais a um determinado valor, o awk seria definitivamente muito mais simples, por exemplo,
awk -F: '{ if ($1 >= 2) print $2}'
Isso me ocorreu esta manhã depois que eu já havia saído. Mas esse tipo de comparação é provavelmente mais comum em arquivos de especificações do que em correspondências exatas. Além disso, citar o "2"
pode forçar o awk a tratá-lo como uma string em vez de um número. Isso não corresponderia à versão 2.0
, mas deixá-la sem numeração - e numérica - permitiria a correspondência.
@ dave-thompson-085 apontou que encerrando a comparação dentro do ação é desnecessária. Ou seja, a parte dentro de {
e }
no precedente é uma ação, para todas as linhas (desde que nenhum padrão é fornecido). Citando a página de manual do mawk:
An AWK program is a sequence of pattern {action} pairs and user function definitions.
e depois
A pattern can be:
BEGIN
END
expression
expression , expression
Uma expressão pode ser uma expressão regular , mas também pode ser uma comparação . Sua sugestão de melhoria é
awk -F: '$1>=2{print $2}'