Yum expresión regular o búsqueda comodín?

11

La documentación de Fedora dice:

5.2. Búsquedas Avanzadas

Si no conoce el nombre del paquete, utilice la búsqueda o proporcione opciones. Alternativamente, use comodines o expresiones regulares con cualquier opción de búsqueda yum para ampliar los criterios de búsqueda.

Bueno, al principio pensé que esto era simplemente incorrecto o desactualizado, ya que ninguna sintaxis conocida de expresiones regulares funcionaría yum search, pero luego encontré esto : yum search [cl-*]por ejemplo. Pero hace algo de otro mundo. Encuentra cosas que no tienen letras "c" ni "l" en el nombre o la descripción. (Lo que quería es encontrar todos los paquetes, cuyos nombres coincidirían con cl-.*regexp.

También encontré pocas personas sugiriendo canalizar los resultados de yum grep, lo que, por supuesto, resuelve el problema. Pero, solo por principio, quiero averiguar qué hizo la cosa entre corchetes. ¿Qué pasa si yumrealmente puede buscar por regexp?

wvxvw
fuente

Respuestas:

12

buscando con YUM

Por lo general, no utiliza ninguna expresión regular (globs) cuando busca, yum searchya que el comando searchya está buscando subcadenas dentro de los nombres de los paquetes y sus resúmenes. ¿Cómo se esto? Hay un mensaje que te dice esto cuando lo usas yum search.

Solo coincidencias de nombre y resumen, use "buscar todo" para todo.

NOTA: La cadena [cl-*]es técnicamente un globo en el shell Bash.

Por lo tanto, generalmente busca fragmentos de cadenas que desee search. Las expresiones regulares entran en juego cuando buscas paquetes particulares. Estos son los comandos YUM como listy install.

Por ejemplo:
$ 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 única advertencia que debe tener cuidado con regexes / globs, es si hay archivos dentro de su shell que se nombran de manera que también coincidan cl-*. En esos casos, su shell expandirá la expresión regular / glob antes de que se presente a YUM.

Entonces, en lugar de ejecutar yum list cl-*, ejecutará el comando yum list cl-file, si hay un archivo que coincida con la expresión regular / glob cl-*.

Por ejemplo:
$ 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

Puede evitar que esto suceda escapando del comodín de esta manera:

$ 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

¿Y qué hay de los corchetes?

Sospecho que tiene archivos en su directorio local que coinciden cuando lo utilizó [cl-*]como argumento yum search. Estos archivos, luego de ser comparados por el shell, se pasaron al yum searchcomando donde coincide donde se encontraron.

Por ejemplo:
$ 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 coincidencia anterior coincidía con el nombre de mi archivo cl-filey no con el cl-*que tenía previsto.

slm
fuente
Oooh, ya veo ahora. Bueno, eso lo explica. Sin embargo, una observación crítica cl-*no es una expresión regular, es una globo como se llame. Es un lenguaje regular (en términos chomskianos), pero generalmente decimos que algo es una expresión regular si define una gramática para el lenguaje regular (mediante el uso de al menos tres operaciones básicas: concatenación, alteración y estrella de Kleene).
wvxvw
@wvxvw: eso es correcto. Comenzaste con la terminología regex y simplemente me incliné hacia ella 8-).
slm
3

Definitivamente diferente versión de yum, usando RHEL 6.5 aquí con yum 3.2.29 Cuidado:
debe citar el * para que no coincida con nada en el directorio actual a través de shell globbing ... Para obtener más detalles sobre eso y un ejemplo práctico, consulte la respuesta posterior: /unix//a/155157/83329

De todas formas, acaba de comprobar de nuevo, la única manera de buscar realmente eficaz con la búsqueda de yum es por yum search all | grep fooque yum search fooda resultados bastante difusas. Pero yum list "foo-*"funciona exactamente como se esperaba, y el único resultado en su caso probablemente sería el paquete cl-asdf.noarch.

Echando un vistazo rápido sobre informes de errores relacionados con yum, la búsqueda de yum también parece tener otros inconvenientes: https://bugs.launchpad.net/percona-server/+bug/580336/comments/2

doktor5000
fuente
1

Lo siento, no puedo comentar todavía, así que tengo que usar una respuesta.

¿Intentaste yum search cl-*o yum list 'cl-*'? Al menos yum whatprovides */foo, funciona para buscar nombres de archivos, aunque ese es un caso un poco especial. De lo contrario, a menudo también uso
yum list all | grep -i foopero tenga cuidado con la salida multilínea de yum, grep podría mostrar solo la primera línea, así que tal vez useyum list all | grep -iA1 foo

También hay algunos ejemplos útiles en la página del manual debajo de "Opciones de lista". La documentación adicional también está disponible directamente en http://yum.baseurl.org/ por ejemplo http://yum.baseurl.org/wiki/YumCommands o tal vez directamente a través de python: http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch

doktor5000
fuente
¿Lo intenté yum search cl-*? - Sí, lo hice. Esto no encuentra nada (¿quizás una versión diferente de yum? Todavía estoy usando FC18).
wvxvw
Bueno, al leer sobre el caso de uso previsto yum search, combinarlo con expresiones regulares / comodines es doblemente redundante. yum searchya hace una búsqueda difusa, por lo que usar comodines es bastante inútil. Si desea restringir su búsqueda, use yum list expressiono yum list all | grep expression. De lo contrario, le sugiero que abra una solicitud de mejora en contra de ñam - buena suerte con eso: p
doktor5000