Yum expressão regular ou pesquisa curinga?


11

A documentação do Fedora diz:

5.2 Pesquisas Avançadas

Se você não souber o nome do pacote, use a pesquisa ou fornece opções. Como alternativa, use curingas ou expressões regulares com qualquer opção de pesquisa yum para ampliar as críticas da pesquisa.

Bem, no começo, pensei que isso estivesse simplesmente errado ou desatualizado, já que nenhuma sintaxe conhecida de expressões regulares funcionaria yum search, mas depois descobri o seguinte : yum search [cl-*]por exemplo. Mas faz algo de outro mundo. Encontra coisas que não têm letras "c" nem "l" no nome ou na descrição. (O que eu queria é encontrar todos os pacotes, cujos nomes seriam correspondidos pelo cl-.*regexp.

Também encontrei poucas pessoas sugerindo canalizar resultados yum grep, o que, é claro, resolve o problema. Mas, apenas por princípio, quero descobrir o que a coisa entre colchetes fez. E se yumrealmente puder pesquisar por regexp?

Respostas:


12

pesquisando com YUM

Geralmente, você não usa expressões regulares (globs) ao pesquisar, yum searchpois o comando searchjá está procurando sub-strings nos nomes dos pacotes e seus resumos. Como eu sei disso? Há uma mensagem que informa isso quando você usa yum search.

Apenas o nome e o resumo correspondem, use "pesquisar tudo" para tudo.

NOTA: A string [cl-*]é tecnicamente uma esfera no shell Bash.

Então você geralmente procura por fragmentos de strings que deseja search. As expressões regulares entram em jogo quando você procura pacotes específicos. Estes são os comandos do YUM como liste 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ê deve ter cuidado com as expressões regulares / globs é se existem arquivos no seu shell que são nomeados de modo que eles também correspondam 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ê estará executando o comando yum list cl-file, se houver um arquivo correspondente ao 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 se proteger contra isso, escapando do curinga da seguinte maneira:

$ 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 suportes

Eu suspeito que você tenha arquivos em seu diretório local que estão sendo correspondidos quando você usou [cl-*]como argumento yum search. Esses arquivos após serem correspondidos pelo shell, foram passados ​​para o yum searchcomando onde as 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.

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


Oooh, eu vejo agora. Bem, isso explica isso. Uma observação detalhada, embora cl-*não seja uma expressão regular, é um globou como é chamada. É uma linguagem regular (em termos chomskianos), mas geralmente dizemos que algo é uma expressão regular se define uma gramática para a linguagem regular (usando pelo menos três operações básicas: concatenação, alteração e estrela de Kleene).
wvxvw 12/09

@wvxvw - está correto. Você começou com a terminologia regex e eu apenas me inclinei nela 8-).
slm

3

Definitivamente versão yum diferente, usando RHEL 6.5 aqui com yum 3.2.29 Cuidado:
Você deve citar * para não corresponder a nada no diretório atual via shell globbing ... Para obter mais detalhes sobre isso e um exemplo prático, consulte a resposta posterior: /unix//a/155157/83329

De qualquer forma, apenas verificado novamente, a única maneira de realmente procurar eficazmente com pesquisa yum é por yum search all | grep fooquanto yum search foodá resultados bastante difusas. Mas yum list "foo-*"funciona da maneira esperada, e o único resultado no seu caso provavelmente seria o pacote cl-asdf.noarch.

Olhar rapidamente sobre os relatórios de erros relacionados ao yum A pesquisa do yum também parece ter outras desvantagens: https://bugs.launchpad.net/percona-server/+bug/580336/comments/2


1

Desculpe, ainda não posso comentar, por isso, use uma resposta.

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

Existem também alguns exemplos úteis na página de manual abaixo de "Opções de lista". Documentação adicional também está disponível diretamente a montante em http://yum.baseurl.org/, por exemplo, http://yum.baseurl.org/wiki/YumCommands ou talvez diretamente via python: http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch


Eu tentei yum search cl-*? - sim eu fiz. Isso não encontra nada (talvez versão diferente do yum? Ainda estou usando o FC18).
Wvxvw 12/09/14

Bem, lendo o caso de uso pretendido para yum search, combiná-lo com expressões regulares / curingas é redundante duplo. yum searchjá faz uma pesquisa confusa, portanto, usar caracteres curinga é bastante inútil. Se você deseja restringir sua pesquisa, use yum list expressionou yum list all | grep expression. Caso contrário, eu sugiro que você abrir uma solicitação de melhoria contra yum - boa sorte com isso: p
doktor5000
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.