Espressione regolare o ricerca jolly?


11

La documentazione di Fedora dice:

5.2. Ricerche avanzate

Se non si conosce il nome del pacchetto, utilizzare la ricerca o fornisce le opzioni. In alternativa, utilizzare caratteri jolly o espressioni regolari con qualsiasi opzione di ricerca yum per ampliare la critica di ricerca.

Bene, all'inizio ho pensato che questo fosse semplicemente sbagliato o obsoleto, dal momento che nessuna sintassi nota delle espressioni regolari avrebbe funzionato yum search, ma poi ho trovato questo : yum search [cl-*]per esempio. Ma fa qualcosa di ultraterreno. Trova cose che non hanno né lettere "c" né "l" nel nome o nella descrizione. (Quello che volevo era trovare tutti i pacchetti, i cui nomi sarebbero stati abbinati da cl-.*regexp.

Ho anche trovato poche persone che suggerivano di convogliare i risultati yum a grep, che, ovviamente, risolve il problema. Ma, in linea di principio, voglio scoprire cosa hanno fatto le cose tra parentesi quadre. Cosa succede se in yumrealtà è possibile eseguire la ricerca tramite regexp?

Risposte:


12

cercando con YUM

In genere non si utilizzano espressioni regolari (globs) durante la ricerca yum searchpoiché il comando searchsta già cercando sottostringhe all'interno dei nomi dei pacchetti e dei relativi riepiloghi. Come faccio a saperlo? C'è un messaggio che ti dice questo quando lo usi yum search.

Solo corrispondenze di nome e riepilogo, usa "cerca tutto" per tutto.

NOTA: la stringa [cl-*]è tecnicamente un glob nella shell Bash.

Quindi generalmente cerchi frammenti di stringhe con cui vuoi search. Le espressioni regolari entrano in gioco quando cerchi pacchetti particolari. Questi sono i comandi YUM come liste install.

Per esempio:
$ 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

L'unico avvertimento che devi fare attenzione con regex / globs è se ci sono file all'interno della tua shell che sono nominati in modo tale che corrispondano anche loro cl-*. In questi casi la shell espanderà il regex / glob prima che venga presentato a YUM.

Quindi, invece di eseguire yum list cl-*, eseguirai il comando yum list cl-file, se c'è un file corrispondente a regex / glob cl-*.

Per esempio:
$ 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

Puoi evitare che ciò accada sfuggendo al jolly in questo modo:

$ 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

E le parentesi

Ho il sospetto che tu abbia dei file nella tua directory locale che vengono trovati quando usati [cl-*]come argomento yum search. Questi file dopo essere stati abbinati dalla shell, sono stati passati al yum searchcomando dove corrispondenze dove poi trovato.

Per esempio:
$ 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: la corrispondenza sopra è stata confrontata con il nome del mio file cl-filee non con quello cl-*previsto.


Oooh, vedo ora. Bene, questo lo spiega. Un'osservazione nitpick sebbene cl-*non sia un'espressione regolare, è una globo come si chiama. È un linguaggio regolare (in termini di Chomskian), ma di solito diciamo che qualcosa è un'espressione regolare se definisce una grammatica per il linguaggio regolare (usando almeno tre operazioni di base: concatenazione, alterazione e stella di Kleene).
wvxvw,

@wvxvw - è corretto. Hai iniziato con la regex terminologica e mi sono appena appoggiato a esso Cool.
slm

3

Versione yum decisamente diversa, usando RHEL 6.5 qui con yum 3.2.29 Attenzione:
dovresti citare * per non far corrispondere nulla nella directory corrente tramite shell globbing ... Per maggiori dettagli su questo e un esempio pratico, vedi la risposta successiva: /unix//a/155157/83329

In ogni modo, appena controllato ancora una volta, l'unico modo per cercare in realtà in modo efficace con la ricerca di yum è da yum search all | grep foocome yum search foodà risultati piuttosto sfocati. Ma yum list "foo-*"funziona esattamente come previsto, e solo il risultato nel tuo caso sarebbe probabilmente il pacchetto cl-asdf.noarch.

Una rapida occhiata alla relazione yum bug riferita alla ricerca yum sembra avere anche altri svantaggi: https://bugs.launchpad.net/percona-server/+bug/580336/comments/2


1

Siamo spiacenti ma non posso ancora commentare, quindi devi usare una risposta.

Hai provato yum search cl-*o yum list 'cl-*'? Almeno per il fatto yum whatprovides */fooche funziona per la ricerca di nomi di file, anche se questo è un po 'un caso speciale. Altrimenti uso spesso,
yum list all | grep -i fooma attenzione all'output multilinea di yum, grep potrebbe mostrare solo la prima riga, quindi forse usareyum list all | grep -iA1 foo

Ci sono anche alcuni esempi utili nella pagina man sotto "Opzioni elenco". Ulteriore documentazione è inoltre disponibile direttamente a monte su http://yum.baseurl.org/ ad esempio http://yum.baseurl.org/wiki/YumCommands o forse direttamente tramite python: http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch


Ci ho provato yum search cl-*? - si l'ho fatto. Questo non trova nulla (forse una versione yum diversa? Sto ancora usando FC18).
wvxvw,

Bene, dalla lettura del caso d'uso intenzionale per yum search, combinarlo con espressioni regolari / caratteri jolly è doppio ridondante. yum searchfa già una ricerca confusa, quindi usare i caratteri jolly è piuttosto inutile. Se si desidera limitare la ricerca, utilizzare yum list expressiono yum list all | grep expression. Altrimenti ti suggerisco di aprire una richiesta di miglioramento contro yum - buona fortuna con questo: p
doktor5000
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.