Miam expression régulière ou recherche générique?

11

La documentation de Fedora indique:

5.2. Recherches avancées

Si vous ne connaissez pas le nom du package, utilisez la recherche ou propose des options. Vous pouvez également utiliser des caractères génériques ou des expressions régulières avec n'importe quelle option de recherche miam pour élargir les critères de recherche.

Eh bien, au début, je pensais que c'était tout simplement faux ou obsolète, car aucune syntaxe connue des expressions régulières ne fonctionnerait avec yum search, mais j'ai trouvé cela : yum search [cl-*]par exemple. Mais cela fait quelque chose d'un autre monde. Il trouve des choses qui n'ont ni lettres "c" ni "l" dans le nom ou la description. (Ce que je voulais, c'était trouver tous les paquets, dont les noms correspondraient à cl-.*regexp.

J'ai également trouvé peu de personnes suggérant de canaliser les résultats miam grep, ce qui, bien sûr, résout le problème. Mais, par principe, je veux savoir ce qu'a fait la chose entre crochets. Que faire si vous yumpouvez réellement rechercher par expression rationnelle?

wvxvw
la source

Réponses:

12

recherche avec YUM

En règle générale, vous n'utilisez pas d'expressions régulières (globes) lors de la recherche avec, yum searchcar la commande searchrecherche déjà des sous-chaînes dans les noms de package et leurs résumés. Comment le sais-je? Il y a un message qui vous le dit lorsque vous utilisez yum search.

Les correspondances de nom et de résumé uniquement, utilisez "Rechercher tout" pour tout

REMARQUE: la chaîne [cl-*]est techniquement un glob dans le shell Bash.

Vous recherchez donc généralement les fragments de chaînes que vous souhaitez utiliser search. Les expressions régulières entrent en jeu lorsque vous recherchez des packages particuliers. Ce sont les commandes YUM comme listet install.

Par exemple:
$ 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

La seule mise en garde que vous devez faire attention avec les expressions régulières / globes, c'est s'il y a des fichiers dans votre shell qui sont nommés de manière à ce qu'ils correspondent également cl-*. Dans ces cas, votre shell étendra l'expression régulière / glob avant de la présenter à YUM.

Ainsi, au lieu d'exécuter, yum list cl-*vous exécuterez la commande yum list cl-file, s'il existe un fichier correspondant à l'expression régulière / glob cl-*.

Par exemple:
$ 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

Vous pouvez vous prémunir contre cela en échappant au caractère générique comme suit:

$ 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

Qu'en est-il des supports

Je soupçonne que vous avez des fichiers dans votre répertoire local qui sont mis en correspondance lorsque vous les utilisez [cl-*]comme argument yum search. Ces fichiers, après avoir été mis en correspondance par le shell, ont été passés à la yum searchcommande où les correspondances ont été trouvées.

Par exemple:
$ 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.

REMARQUE: la correspondance ci-dessus a été comparée au nom de mon fichier cl-file, et non pas cl-*comme je l'avais prévu.

slm
la source
Oooh, je vois maintenant. Eh bien, cela explique cela. Cependant, une remarque tatillonne cl-*n'est pas une expression régulière, c'est une globou quelque chose comme ça. C'est un langage régulier (en termes chomskiens), mais nous disons généralement que quelque chose est une expression régulière s'il définit une grammaire pour le langage régulier (en utilisant au moins trois opérations de base: concaténation, altération et étoile de Kleene).
wvxvw du
@wvxvw - c'est exact. Vous avez commencé avec la terminologie regex et je me suis juste penché dessus 8-).
slm
3

Version définitivement différente de yum, utilisant RHEL 6.5 ici avec yum 3.2.29 Attention:
vous devez citer le * pour ne rien faire correspondre dans le répertoire actuel via le globbing shell ... Pour plus de détails à ce sujet et un exemple pratique, voir la réponse suivante: /unix//a/155157/83329

Quoi qu'il en soit, juste vérifié à nouveau, la seule façon de rechercher réellement efficacement avec la recherche yum est par yum search all | grep fooque yum search foodonne des résultats assez flous. Mais yum list "foo-*"fonctionne comme prévu, et le seul résultat dans votre cas serait probablement le package cl-asdf.noarch.

Un coup d'œil rapide sur les rapports de bogues liés à yum yum semble avoir également d'autres inconvénients: https://bugs.launchpad.net/percona-server/+bug/580336/comments/2

doktor5000
la source
1

Désolé, vous ne pouvez pas encore commenter, vous devez donc utiliser une réponse.

Avez-vous essayé yum search cl-*ou yum list 'cl-*'? Au moins, yum whatprovides */foocela fonctionne pour la recherche de noms de fichiers, bien que ce soit un cas particulier. Sinon, j'utilise aussi souvent,
yum list all | grep -i foomais méfiez-vous de la sortie multiligne de yum, grep pourrait ne montrer que la première ligne, alors peut-être utiliseryum list all | grep -iA1 foo

Vous trouverez également quelques exemples utiles dans la page de manuel ci-dessous "Options de liste". Une documentation supplémentaire est également disponible directement en amont sur http://yum.baseurl.org/ par exemple http://yum.baseurl.org/wiki/YumCommands ou peut-être directement via python: http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch

doktor5000
la source
Ai-je essayé yum search cl-*? - Oui je l'ai fait. Cela ne trouve rien (peut-être une version miam différente? J'utilise toujours le FC18).
wvxvw
Eh bien, à la lecture du cas d'utilisation prévu pour yum search, le combiner avec des expressions régulières / caractères génériques est double redondant. yum searchfait déjà une recherche floue, donc l'utilisation de caractères génériques est assez inutile. Si vous souhaitez limiter votre recherche, utilisez yum list expressionou yum list all | grep expression. Sinon, je vous suggère d'ouvrir une demande d'amélioration contre miam - bonne chance avec ça: p
doktor5000