Mniam wyrażenie regularne czy wyszukiwanie z użyciem symboli zastępczych

12

Dokumentacja Fedory mówi:

5.2 Zaawansowane wyszukiwania

Jeśli nie znasz nazwy pakietu, użyj wyszukiwania lub udostępnia opcje. Alternatywnie, użyj symboli wieloznacznych lub wyrażeń regularnych z dowolną opcją wyszukiwania yum, aby poszerzyć kryteria wyszukiwania.

Cóż, na początku myślałem, że to jest po prostu błędne lub nieaktualne, ponieważ nie wiadomo, składnia wyrażeń regularnych będzie pracować yum search, ale potem znalazłem to : yum search [cl-*]na przykład. Ale robi coś nieziemskiego. Znajduje rzeczy, które nie mają ani liter „c”, ani „l” w nazwie ani opisie. (Chciałem znaleźć wszystkie pakiety, których nazwy pasowałyby do cl-.*wyrażenia regularnego.

Znalazłem też kilka osób, które sugerowałyby, aby przeskoczyć wyniki mniam grep, co oczywiście rozwiązuje problem. Ale, zasadniczo, chcę się dowiedzieć, co zrobiła rzecz w nawiasach kwadratowych. Co jeśli yumfaktycznie można wyszukiwać według wyrażenia regularnego?

wvxvw
źródło

Odpowiedzi:

13

wyszukiwanie za pomocą YUM

Na ogół nie używasz żadnych wyrażeń regularnych (globów) podczas wyszukiwania, yum searchponieważ polecenie searchszuka już podłańcuchów w nazwach pakietów i ich podsumowaniach. Skąd to wiem? Jest komunikat, który mówi ci to, kiedy używasz yum search.

Tylko dopasowania nazw i podsumowań, użyj „szukaj wszystkiego” dla wszystkiego.

UWAGA: Ciąg [cl-*]jest technicznie globusem w powłoce Bash.

Więc ogólnie szukasz fragmentów ciągów, które chcesz search. Wyrażenia regularne wchodzą w grę, gdy szukasz konkretnych pakietów. Są to polecenia YUM, takie jak listi install.

Na przykład:
$ 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

Jedynym zastrzeżeniem, na które musisz uważać przy wyrażeniach regularnych / globach, jest to, że w twojej powłoce znajdują się pliki, które są tak nazwane, że one również pasują cl-*. W takich przypadkach twoja powłoka rozwinie wyrażenie regularne / glob przed zaprezentowaniem go YUM.

Zamiast uruchamiać yum list cl-*będziesz polecenie yum list cl-file, jeśli istnieje plik pasujący do wyrażenia regularnego / glob cl-*.

Na przykład:
$ 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

Możesz uchronić się przed tym, uciekając od symbolu wieloznacznego w następujący sposób:

$ 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 co z nawiasami

Podejrzewam, że masz pliki w katalogu lokalnym, które są dopasowywane, gdy używasz ich [cl-*]jako argumentu yum search. Pliki te, po dopasowaniu przez powłokę, zostały przekazane do yum searchpolecenia, w którym znaleziono dopasowania.

Na przykład:
$ 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.

UWAGA: Powyższe dopasowanie zostało dopasowane do nazwy mojego pliku cl-file, a nie cl-*zgodnie z planem.

slm
źródło
Oooh, teraz rozumiem. Cóż, to wyjaśnia. Jedna nędzna uwaga cl-*nie jest jednak wyrażeniem regularnym, ale globjakkolwiek się nazywa. Jest to język regularny (w języku chomskim), ale zwykle mówimy, że coś jest wyrażeniem regularnym, jeśli definiuje gramatykę dla języka regularnego (przy użyciu co najmniej trzech podstawowych operacji: konkatenacji, zmiany i gwiazdy Kleene).
wvxvw
@wvxvw - to prawda. Zacząłeś od wyrażenia regularnego, a ja po prostu się do niego przyłączyłem 8-).
slm
3

Zdecydowanie inna wersja yum, używając RHEL 6.5 tutaj z yum 3.2.29 Uwaga:
powinieneś zacytować *, aby nie pasować do niczego w bieżącym katalogu poprzez globbing powłoki ... Aby uzyskać więcej szczegółów na ten temat i praktyczny przykład, zobacz późniejszą odpowiedź: /unix//a/155157/83329

W każdym razie, właśnie sprawdzone ponownie, jedynym sposobem na skuteczne wyszukiwanie za pomocą yum search jest, yum search all | grep fooponieważ yum search foodaje dość rozmyte wyniki. Ale yum list "foo-*"działa tak, jak się spodziewano, a jedynym wynikiem w twoim przypadku byłby prawdopodobnie pakiet cl-asdf.noarch.

Szybkie przeglądanie pokrewnych raportów o błędach mniam Wyszukiwanie ma również inne wady: https://bugs.launchpad.net/percona-server/+bug/580336/comments/2

doktor5000
źródło
1

Niestety nie mogę jeszcze komentować, więc musisz użyć odpowiedzi.

Próbowałeś yum search cl-*czy yum list 'cl-*'? Przynajmniej yum whatprovides */foodziała w przypadku wyszukiwania nazw plików, choć jest to szczególny przypadek. W przeciwnym razie często używam,
yum list all | grep -i fooale uważaj na wieloliniowe wyjście yum, grep może pokazywać tylko pierwszą linię, więc może użyjyum list all | grep -iA1 foo

Istnieje również kilka użytecznych przykładów na stronie podręcznika poniżej „Opcje listy”. Dodatkowa dokumentacja jest również dostępna bezpośrednio na stronie http://yum.baseurl.org/ np. Http://yum.baseurl.org/wiki/YumCommands lub może bezpośrednio przez python: http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch

doktor5000
źródło
Próbowałem yum search cl-*? - tak. To nic nie znajduje (może inna mniam wersja? Nadal używam FC18).
wvxvw
Cóż, po przeczytaniu o przeznaczeniu użycia yum search, łączenie go z wyrażeniami regularnymi / symbolami wieloznacznymi jest podwójnie zbędne. yum searchjuż wykonuje wyszukiwanie rozmyte, więc używanie symboli wieloznacznych jest dość bezużyteczne. Jeśli chcesz ograniczyć wyszukiwanie, użyj yum list expressionlub yum list all | grep expression. W przeciwnym razie proponuję otworzyć prośbę o ulepszenie przeciwko mniam - powodzenia z tym: p
doktor5000