Yum düzenli ifade veya joker karakterle arama?


12

Fedora belgeleri diyor ki:

5.2. Gelişmiş Aramalar

Paketin adını bilmiyorsanız, aramayı veya seçenekleri sunar. Alternatif olarak, arama ölçütlerini genişletmek için herhangi bir yum arama seçeneğiyle joker karakterler veya normal ifadeler kullanın.

Peki, ilk I'de normal ifadelerin bilinen sözdizimi ile çalışmak olacağından bu, sadece yanlış veya modası geçmiş olduğunu düşündü yum search, ama sonra buldum bu : yum search [cl-*]örneğin. Ama dünya çapında bir şey yapar. Adında veya açıklamasında "c" veya "l" harfleri olmayan şeyler bulur. (İstediğim, isimleri cl-.*regexp ile eşleşen tüm paketleri bulmak .

Ayrıca grep, elbette, sorunu çözen yum sonuçlarını ortaya koyan birkaç kişi buldum . Ancak, sadece prensip olarak, köşeli parantez içindeki şeyin ne yaptığını öğrenmek istiyorum. Ya yumnormal ifade ile arama yapabilirse?

Yanıtlar:


13

YUM ile arama

yum searchKomut searchzaten paket adları ve özetleri içinde alt dizeler aradığından, genellikle arama yaparken normal ifadeler (globs) kullanmazsınız . Bunu nasıl bilebilirim? Bunu kullandığınızda bunu söyleyen bir mesaj var yum search.

Yalnızca ad ve özet eşleşmeleri, her şey için "tümünü ara" seçeneğini kullanın.

NOT: Dize [cl-*]teknik olarak Bash kabuğundaki bir küredir.

Yani genellikle istediğiniz dizelerin parçalarını ararsınız search. Belirli paketleri ararken normal ifadeler devreye girer. Bunlar listve gibi YUM komutlarıdır install.

Örneğin:
$ 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

Regexes / globs ile dikkatli olmanız gereken tek uyarı, kabuğunuzda da eşleşecekleri şekilde adlandırılmış dosyalar varsa cl-*. Bu durumlarda kabuğunuz YUM'a sunulmadan önce normal regex / glob'u genişletecektir.

Bunun yerine çalışan yum list cl-*komutunu koşacağım yum list cl-fileregex / topak uyan bir dosya varsa, cl-*.

Örneğin:
$ 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

Joker karakterden şu şekilde kaçarak bu duruma karşı korunabilirsiniz:

$ 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

Peki ya parantezler

Yerel dizininizde [cl-*]bağımsız değişken olarak kullanıldığında eşleşen dosyalarınız olduğundan şüpheleniyorum yum search. Kabuk tarafından eşleştirildikten sonra bu dosyalar, daha yum searchsonra bulunan eşleşmelerin bulunduğu komuta aktarıldı .

Örneğin:
$ 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.

NOT: Benim dosya adının eşleştirildi maç şeyden cl-filedeğil, cl-*ben amacı vardı gibi.


Oooh, şimdi anlıyorum. Bu açıklıyor. Bir nitpicking sözleri cl-*düzenli bir ifade değil, ne denirse glob. Bu normal bir dildir (Chomskian terimleriyle), ancak normal bir dil için bir dilbilgisi tanımlarsa (en az üç temel işlem kullanarak: birleştirme, değiştirme ve Kleene yıldızı) bir şeyin normal bir ifade olduğunu söyleriz.
wvxvw

@wvxvw - bu doğru. Regex terminolojisi ile başladınız ve ben de ona doğru eğildim 8-).
slm

3

Dikkat: RHEL 6.5 kullanarak yum 3.2.29 kullanarak kesinlikle farklı yum sürümü Dikkat:
Mevcut klasördeki hiçbir şeyi kabuk globbing ile eşleşmeyecek şekilde * alıntı yapmalısınız ... Bu ve pratik bir örnek için daha sonraki cevaba bakınız: https://unix.stackexchange.com/a/155157/83329

Her neyse, sadece kontrol, aslında yum arama ile etkili arama için tek yolu yum search all | grep fooolarak yum search foooldukça bulanık sonuçlar verir. Ancak yum list "foo-*"beklendiği gibi çalışır ve muhtemelen davanız cl-asdf.noarch paketi olacaktır.

Hızla ilgili yum hata raporları üzerinden bakmak yum arama başka dezavantajları var gibi görünüyor: https://bugs.launchpad.net/percona-server/+bug/580336/comments/2


1

Üzgünüm henüz yorum yapamadığımız için bir cevap kullanmak zorundasınız

Denediniz mi yum search cl-*yoksa yum list 'cl-*'? En azından yum whatprovides */foodosya adlarını aramak için çalışıyor, ancak bu biraz özel bir durum. Aksi takdirde sık sık kullanıyorum
yum list all | grep -i fooama yum çok satırlı çıktı dikkat, grep sadece ilk satırı gösterebilir, bu yüzden belki kullanınyum list all | grep -iA1 foo

"Liste Seçenekleri" nin altındaki kılavuz sayfasında bazı yararlı örnekler de vardır. Ek belgeler doğrudan http://yum.baseurl.org/ adresinde de bulunabilir, örneğin http://yum.baseurl.org/wiki/YumCommands veya belki doğrudan python ile: http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch


Denedim yum search cl-*mi? - Evet yaptım. Bu hiçbir şey bulamaz (belki farklı yum sürümü? Hala FC18 kullanıyorum).
wvxvw

Amaçlanan kullanım senaryosunu okumaktan, yum searchonu düzenli ifadeler / joker karakterlerle birleştirmek çift gereksizdir. yum searchzaten bulanık bir arama yapıyor, bu yüzden joker karakterler kullanmak işe yaramaz. Aramanızı kısıtlamak istiyorsanız yum list expressionveya tuşunu kullanın yum list all | grep expression. Aksi takdirde yum karşı bir geliştirme isteği açmanızı öneririm - iyi şanslar: p
doktor5000
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.