Yum regulärer Ausdruck oder Platzhaltersuche?

11

In der Fedora- Dokumentation heißt es:

5.2. Erweiterte Suche

Wenn Sie den Namen des Pakets nicht kennen, verwenden Sie die Suche oder stellen Sie Optionen bereit. Verwenden Sie alternativ Platzhalter oder reguläre Ausdrücke mit einer beliebigen Suchoption, um die Suchkriterien zu erweitern.

Nun, zuerst dachte ich, dass dies einfach falsch oder veraltet ist, da keine bekannte Syntax von regulären Ausdrücken funktionieren würde yum search, aber dann fand ich dies : yum search [cl-*]zum Beispiel. Aber es macht etwas Jenseitiges. Es findet Dinge, die weder "c" noch "l" Buchstaben im Namen oder in der Beschreibung haben. (Ich wollte alle Pakete finden, deren Namen mit cl-.*regulärem Ausdruck übereinstimmen würden.

Ich fand auch wenige Leute, die vorschlugen, leckere Ergebnisse zu pfeifen grep, was natürlich das Problem löst. Aber im Prinzip möchte ich herausfinden, was das Ding in den eckigen Klammern getan hat. Was ist, wenn yumtatsächlich nach regulären Ausdrücken gesucht werden kann?

wvxvw
quelle

Antworten:

12

Suche mit YUM

Bei der Suche mit verwenden Sie im Allgemeinen keine regulären Ausdrücke (Globs), yum searchda der Befehl searchbereits nach Unterzeichenfolgen in den Paketnamen und deren Zusammenfassungen sucht. Woher weiß ich das? Es gibt eine Meldung, die Ihnen dies bei der Verwendung mitteilt yum search.

Nur Name und Zusammenfassung stimmen überein, verwenden Sie "Alle durchsuchen" für alles.

HINWEIS: Die Zeichenfolge [cl-*]ist technisch gesehen ein Glob in der Bash-Shell.

Sie suchen also im Allgemeinen nach Zeichenfolgenfragmenten, mit denen Sie arbeiten möchten search. Die regulären Ausdrücke kommen ins Spiel, wenn Sie nach bestimmten Paketen suchen. Dies sind die YUM-Befehle wie listund install.

Beispielsweise:
$ 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

Die einzige Einschränkung, die Sie bei regulären Ausdrücken / Globs beachten müssen, ist, wenn sich in Ihrer Shell Dateien befinden, die so benannt sind, dass auch sie übereinstimmen cl-*. In diesen Fällen erweitert Ihre Shell den regulären Ausdruck / Glob, bevor er YUM präsentiert wird.

Anstatt also auszuführen, führen yum list cl-*Sie den Befehl aus yum list cl-file, wenn eine Datei vorhanden ist, die dem regulären Ausdruck / Glob entspricht cl-*.

Beispielsweise:
$ 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

Sie können sich davor schützen, indem Sie dem Platzhalter folgendermaßen entkommen:

$ 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

Was ist also mit den Klammern?

Ich vermute, Sie haben Dateien in Ihrem lokalen Verzeichnis, die übereinstimmen, wenn Sie [cl-*]als Argument für verwenden yum search. Diese Dateien wurden nach dem Abgleich durch die Shell an den yum searchBefehl übergeben, wo Übereinstimmungen gefunden wurden.

Beispielsweise:
$ 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.

HINWEIS: Die obige Übereinstimmung wurde mit dem Namen meiner Datei abgeglichen cl-fileund nicht mit der cl-*von mir beabsichtigten.

slm
quelle
Oooh, ich verstehe jetzt. Nun, das erklärt es. Eine pingelige Bemerkung cl-*ist jedoch kein regulärer Ausdruck, sondern ein globoder wie auch immer er heißt. Es ist eine reguläre Sprache (in chomskischen Begriffen), aber wir sagen normalerweise, dass etwas ein regulärer Ausdruck ist, wenn es eine Grammatik für die reguläre Sprache definiert (indem mindestens drei grundlegende Operationen verwendet werden: Verkettung, Änderung und Kleene-Stern).
wvxvw
@wvxvw - das ist richtig. Sie haben mit der Terminologie Regex begonnen und ich habe mich nur darauf gelehnt 8-).
slm
3

Definitiv andere yum-Version, die RHEL 6.5 hier mit yum 3.2.29 verwendet. Achtung:
Sie sollten das * angeben, um über Shell-Globbing nichts im aktuellen Verzeichnis zu finden ... Weitere Details dazu und ein praktisches Beispiel finden Sie in der späteren Antwort: /unix//a/155157/83329

Sowieso hätte gerade überprüft wieder, den einzigen Weg , wirklich effektiv zu suchen , mit yum Suche nach ist yum search all | grep fooso yum search fooziemlich unscharfe Ergebnisse. Funktioniert aber yum list "foo-*"wie erwartet und führt in Ihrem Fall wahrscheinlich nur zum Paket cl-asdf.noarch.

Ein kurzer Blick auf verwandte yum-Fehlerberichte yum search scheint auch andere Nachteile zu haben: https://bugs.launchpad.net/percona-server/+bug/580336/comments/2

doktor5000
quelle
1

Leider kann noch kein Kommentar abgegeben werden, daher muss eine Antwort verwendet werden.

Hast du es versucht yum search cl-*oder yum list 'cl-*'? Zumindest yum whatprovides */foofunktioniert es für die Suche nach Dateinamen, obwohl dies ein Sonderfall ist. Ansonsten benutze ich auch oft,
yum list all | grep -i fooaber hüte dich vor der mehrzeiligen Ausgabe von yum, grep zeigt möglicherweise nur die erste Zeile an, also benutze sie vielleichtyum list all | grep -iA1 foo

Es gibt auch einige nützliche Beispiele in der Manpage unter "Listenoptionen". Zusätzliche Dokumentation ist auch direkt vorgelagert unter http://yum.baseurl.org/ verfügbar, z. B. http://yum.baseurl.org/wiki/YumCommands oder direkt über Python: http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch

doktor5000
quelle
Habe ich versuchen yum search cl-*? - Ja, habe ich. Dies findet nichts (vielleicht andere yum Version? Ich benutze immer noch FC18).
wvxvw
Nach dem Lesen des beabsichtigten Anwendungsfalls für yum searchist die Kombination mit regulären Ausdrücken / Platzhaltern doppelt redundant. yum searchführt bereits eine Fuzzy-Suche durch, daher ist die Verwendung von Platzhaltern ziemlich nutzlos. Wenn Sie Ihre Suche einschränken möchten, verwenden Sie yum list expressionoder yum list all | grep expression. Ansonsten schlage ich vor, dass Sie eine Verbesserungsanfrage gegen yum eröffnen - viel Glück damit: p
doktor5000