Yum ekspresi reguler atau pencarian wildcard?

11

Dokumentasi Fedora mengatakan:

5.2. Pencarian Lanjutan

Jika Anda tidak tahu nama paket, gunakan pencarian atau berikan opsi. Atau, gunakan wild card atau ekspresi reguler dengan opsi pencarian yum apa pun untuk memperluas kriteria pencarian.

Yah, pada awalnya saya berpikir bahwa ini hanya salah atau ketinggalan zaman, karena tidak ada sintaks yang dikenal untuk ekspresi reguler yang dapat digunakan yum search, tetapi kemudian saya menemukan ini : yum search [cl-*]misalnya. Tapi itu melakukan sesuatu yang lain dari dunia. Ia menemukan hal-hal yang tidak memiliki huruf "c" atau "l" dalam nama atau deskripsi. (Yang saya inginkan adalah menemukan semua paket, yang namanya akan dicocokkan dengan cl-.*regexp.

Saya juga menemukan beberapa orang menyarankan untuk menyalurkan hasil yum ke grep, yang, tentu saja, memecahkan masalah. Tetapi, pada prinsipnya, saya ingin mencari tahu apa yang dilakukan kurung siku. Bagaimana jika yumsebenarnya dapat mencari dengan regexp?

wvxvw
sumber

Jawaban:

12

mencari dengan YUM

Anda biasanya tidak menggunakan ekspresi reguler (gumpalan) ketika mencari dengan yum searchkarena perintah searchsudah mencari sub-string dalam nama paket dan ringkasannya. Bagaimana saya tahu ini? Ada pesan yang memberi tahu Anda hal ini saat Anda menggunakan yum search.

Hanya nama dan ringkasan yang cocok, gunakan "cari semua" untuk semuanya.

CATATAN: String [cl-*]tersebut secara teknis gumpal di dalam shell Bash.

Jadi Anda biasanya mencari fragmen string yang Anda inginkan search. Ekspresi reguler ikut bermain ketika Anda mencari paket tertentu. Ini adalah perintah YUM seperti listdan install.

Sebagai contoh:
$ 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

Satu-satunya peringatan Anda harus berhati-hati dengan regex / gumpalan, adalah jika ada file dalam shell Anda yang dinamai sedemikian sehingga mereka juga akan cocok cl-*. Dalam kasus tersebut, shell Anda akan memperluas regex / glob sebelum dipresentasikan ke YUM.

Jadi alih-alih menjalankan yum list cl-*Anda akan menjalankan perintah yum list cl-file, jika ada file yang cocok dengan regex / glob cl-*.

Sebagai contoh:
$ 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

Anda dapat mencegah hal ini terjadi dengan melarikan diri dari wildcard seperti:

$ 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

Jadi bagaimana dengan kurung

Saya menduga Anda memiliki file di direktori lokal Anda yang cocok ketika Anda digunakan [cl-*]sebagai argumen yum search. File-file ini setelah dicocokkan oleh shell, diteruskan ke yum searchperintah di mana cocok di mana kemudian ditemukan.

Sebagai contoh:
$ 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.

CATATAN: Pertandingan di atas cocok dengan nama file saya cl-file,, dan bukan cl-*seperti yang saya maksudkan.

slm
sumber
Oooh, saya mengerti sekarang. Nah, itu menjelaskannya. Namun satu komentar menarik cl-*bukan ekspresi reguler, itu adalah globatau apa pun namanya. Ini adalah bahasa biasa (dalam istilah Chomskian), tetapi kami biasanya mengatakan bahwa sesuatu adalah ekspresi reguler jika ia mendefinisikan tata bahasa untuk bahasa biasa (dengan menggunakan setidaknya tiga operasi dasar: penggabungan, perubahan dan bintang Kleene).
wvxvw
@ wvxvw - benar. Anda mulai dengan regex terminologi dan saya hanya mencondongkannya 8-).
slm
3

Versi yum yang sangat berbeda, menggunakan RHEL 6.5 di sini dengan yum 3.2.29 Hati-hati:
Anda harus mengutip * untuk tidak cocok dengan apa pun di direktori saat ini melalui shell globbing ... Untuk detail lebih lanjut tentang itu dan contoh praktis, lihat jawaban nanti: /unix//a/155157/83329

Anyways, hanya memeriksa lagi, satu-satunya cara untuk benar-benar mencari secara efektif dengan pencarian yum adalah dengan yum search all | grep foosebagai yum search foomemberikan hasil yang cukup kabur. Tetapi yum list "foo-*"berfungsi seperti yang diharapkan, dan hanya menghasilkan dalam kasus Anda mungkin akan menjadi paket cl-asdf.noarch.

Melirik cepat terkait laporan bug yum terkait pencarian yum tampaknya juga memiliki kelemahan lain: https://bugs.launchpad.net/percona-server/+bug/580336/comments/2

doktor5000
sumber
1

Maaf belum dapat berkomentar jadi harus menggunakan jawaban.

Apakah kamu sudah mencoba yum search cl-*atau tidak yum list 'cl-*'? Setidaknya untuk yum whatprovides */fooitu berfungsi untuk mencari nama file, meskipun itu sedikit kasus khusus. Kalau tidak, saya juga sering menggunakan
yum list all | grep -i footetapi hati-hati dengan output multiline dari yum, grep mungkin hanya menampilkan baris pertama, jadi mungkin gunakanyum list all | grep -iA1 foo

Ada juga beberapa contoh berguna di halaman manual di bawah "Opsi Daftar". Dokumentasi tambahan juga tersedia langsung di hulu di http://yum.baseurl.org/ misalnya http://yum.baseurl.org/wiki/YumCommands atau mungkin langsung melalui python: http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch

doktor5000
sumber
Apakah saya sudah mencoba yum search cl-*? - ya saya lakukan. Ini tidak menemukan apa pun (mungkin versi yum yang berbeda? Saya masih menggunakan FC18).
wvxvw
Nah, dari membaca pada use case yang dimaksudkan untuk yum search, menggabungkannya dengan ekspresi reguler / wildcard adalah double-redundant. yum searchsudah melakukan pencarian fuzzy, jadi menggunakan wildcard cukup berguna. Jika Anda ingin membatasi pencarian Anda, gunakan yum list expressionatau yum list all | grep expression. Kalau tidak, saya sarankan Anda membuka permintaan tambahan terhadap yum - semoga sukses dengan itu: p
doktor5000