Yum expressão regular ou pesquisa de curinga?

8

A documentação do Fedora diz:

5.2. Advanced Searches

If you do not know the name of the package, use the search or provides options. Alternatively, use wild cards or regular expressions with any yum search option to broaden the search critieria.

Bem, no começo eu pensei que isso fosse simplesmente errado ou desatualizado, já que nenhuma sintaxe conhecida de expressões regulares funcionaria com yum search , mas então eu encontrei isto : yum search [cl-*] por exemplo. Mas faz algo de outro mundo. Ele encontra coisas que não possuem letras "c" nem "l" no nome ou na descrição. (O que eu queria é encontrar todos os pacotes, cujos nomes seriam correspondidos por cl-.* regexp.

Eu também encontrei poucas pessoas sugerindo canalizar os resultados do yum para grep , o que, claro, resolve o problema. Mas, apenas por princípio, quero descobrir o que a coisa nos colchetes faz. E se yum realmente puder pesquisar por regexp?

    
por wvxvw 11.09.2014 / 21:13

3 respostas

10

pesquisando com o YUM

Você geralmente não usa expressões regulares (globs) ao pesquisar com yum search , pois o comando search já está procurando sub-strings nos nomes de pacotes e seus resumos. Como eu sei disso? Há uma mensagem que diz isso quando você usa yum search .

Name and summary matches only, use "search all" for everything.

NOTA: A string [cl-*] é tecnicamente um glob no shell Bash.

Portanto, você geralmente procura fragmentos de sequências que deseja com search . As expressões regulares entram em jogo quando você está procurando pacotes específicos. Estes são os comandos do YUM, como list e install .

Por exemplo:
$ yum list cl-* | expand
Loaded plugins: fastestmirror, langpacks, refresh-packagekit, tsflags
Loading mirror speeds from cached hostfile
 * fedora: mirror.dmacc.net
 * rpmfusion-free: mirror.nexcess.net
 * rpmfusion-free-updates: mirror.nexcess.net
 * rpmfusion-nonfree: mirror.nexcess.net
 * rpmfusion-nonfree-updates: mirror.nexcess.net
 * updates: mirror.dmacc.net
Available Packages
cl-asdf.noarch                  20101028-5.fc19                 fedora          
cl-clx.noarch                   0.7.4-4.3                       home_zhonghuaren
cl-ppcre.noarch                 2.0.3-3.3                       home_zhonghuaren

A única ressalva que você precisa ter cuidado com regexes / globs é se houver arquivos dentro do shell com nomes que também correspondam a cl-* . Nesses casos, seu shell expandirá o regex / glob antes de ser apresentado ao YUM.

Então, em vez de executar yum list cl-* , você executará o comando yum list cl-file , se houver um arquivo correspondente à regex / glob cl-* .

Por exemplo:
$ ls cl-file
cl-file

$ yum list cl-*
Loaded plugins: fastestmirror, langpacks, refresh-packagekit, tsflags
Loading mirror speeds from cached hostfile
 * fedora: mirror.steadfast.net
 * rpmfusion-free: mirror.nexcess.net
 * rpmfusion-free-updates: mirror.nexcess.net
 * rpmfusion-nonfree: mirror.nexcess.net
 * rpmfusion-nonfree-updates: mirror.nexcess.net
 * updates: mirror.steadfast.net
Error: No matching Packages to list

Você pode evitar que isso aconteça escapando do curinga da seguinte forma:

$ yum list cl-\* | expand
Loaded plugins: fastestmirror, langpacks, refresh-packagekit, tsflags
Loading mirror speeds from cached hostfile
 * fedora: mirror.dmacc.net
 * rpmfusion-free: mirror.nexcess.net
 * rpmfusion-free-updates: mirror.nexcess.net
 * rpmfusion-nonfree: mirror.nexcess.net
 * rpmfusion-nonfree-updates: mirror.nexcess.net
 * updates: mirror.dmacc.net
Available Packages
cl-asdf.noarch                  20101028-5.fc19                 fedora          
cl-clx.noarch                   0.7.4-4.3                       home_zhonghuaren
cl-ppcre.noarch                 2.0.3-3.3                       home_zhonghuaren

Então, e os colchetes

Eu suspeito que você tenha arquivos em seu diretório local que estão sendo correspondidos quando você usou [cl-*] como um argumento para yum search . Esses arquivos depois de serem correspondidos pelo shell, foram passados para o comando yum search onde correspondências foram encontradas.

Por exemplo:
$ ls cl-file
cl-file

$ yum search cl-*
Loaded plugins: fastestmirror, langpacks, refresh-packagekit, tsflags
Loading mirror speeds from cached hostfile
 * fedora: mirror.dmacc.net
 * rpmfusion-free: mirror.nexcess.net
 * rpmfusion-free-updates: mirror.nexcess.net
 * rpmfusion-nonfree: mirror.nexcess.net
 * rpmfusion-nonfree-updates: mirror.nexcess.net
 * updates: mirror.dmacc.net
======================================================================= N/S matched: cl-file =======================================================================
opencl-filesystem.noarch : OpenCL filesystem layout

  Name and summary matches only, use "search all" for everything.

OBSERVAÇÃO: A correspondência acima foi comparada com o nome do meu arquivo, cl-file , e não com o cl-* como eu pretendia.

    
por 12.09.2014 / 03:56
3

Versão yum definitivamente diferente, usando o RHEL 6.5 aqui com o yum 3.2.29 Cuidado:
Você deve citar o * para não corresponder a nada no diretório atual via shell globbing ... Para obter mais detalhes sobre isso e um exemplo prático, veja a última resposta: link

De qualquer forma, apenas marcada novamente, a única maneira de pesquisar efetivamente com a pesquisa do yum é por yum search all | grep foo , pois yum search foo fornece resultados bastante confusos. Mas o yum list "foo-*" funciona como esperado, e somente o resultado no seu caso provavelmente seria o pacote cl-asdf.noarch.

Olhando rapidamente para os relatórios de bugs relacionados ao yum, a pesquisa do yum parece ter outras desvantagens: link

    
por 12.09.2014 / 20:15
1

Lamentamos, mas não podemos comentar ainda, por isso temos que usar uma resposta.

Você tentou yum search cl-* ou yum list 'cl-*' ? Pelo menos para yum whatprovides */foo ele funciona para pesquisar nomes de arquivos, embora isso seja um caso especial. Caso contrário, eu também geralmente uso o yum list all | grep -i foo , mas cuidado com a saída multilinha do yum, o grep pode mostrar apenas a primeira linha, então talvez use yum list all | grep -iA1 foo

Existem também alguns exemplos úteis na página man abaixo de "List Options". Documentação adicional também está disponível diretamente no upstream, no link link ou talvez diretamente via python: link

    
por 12.09.2014 / 00:13