Yum biểu hiện thường xuyên hoặc tìm kiếm ký tự đại diện?


11

Tài liệu của Fedora nói:

5.2. Tìm kiếm nâng cao

Nếu bạn không biết tên của gói, hãy sử dụng tìm kiếm hoặc cung cấp tùy chọn. Ngoài ra, sử dụng thẻ hoang dã hoặc biểu thức thông thường với bất kỳ tùy chọn tìm kiếm yum nào để mở rộng critieria tìm kiếm.

Chà, lúc đầu tôi nghĩ rằng điều này đơn giản là sai hoặc lỗi thời, vì không có cú pháp biểu thức chính quy nào được biết đến sẽ hoạt động yum search, nhưng sau đó tôi đã tìm thấy điều này : yum search [cl-*]ví dụ. Nhưng nó làm một cái gì đó khác. Nó tìm thấy những thứ không có chữ "c" hay "l" trong tên hoặc mô tả. (Điều tôi muốn là tìm tất cả các gói, tên của chúng sẽ được khớp với cl-.*regrec.

Tôi cũng tìm thấy một vài người đề nghị kết quả đường ống yum grep, tất nhiên, giải quyết vấn đề. Nhưng, theo nguyên tắc, tôi muốn tìm hiểu những gì đã làm điều trong dấu ngoặc vuông làm. Điều gì nếu yumthực sự có thể tìm kiếm bằng regrec?

Câu trả lời:


12

tìm kiếm với YUM

Nói chung, bạn không sử dụng bất kỳ biểu thức chính quy nào (tìm kiếm) khi tìm kiếm yum searchvì lệnh searchđã tìm kiếm các chuỗi con trong tên gói và tóm tắt của chúng. Làm thế nào để tôi biết điều này? Có một thông báo cho bạn biết điều này khi bạn sử dụng yum search.

Tên và tóm tắt chỉ khớp, sử dụng "tìm kiếm tất cả" cho tất cả mọi thứ.

LƯU Ý: Về [cl-*]mặt kỹ thuật, chuỗi là một quả cầu trong vỏ Bash.

Vì vậy, bạn thường tìm kiếm các đoạn dây mà bạn muốn search. Các biểu thức chính quy xuất hiện khi bạn đang tìm kiếm các gói cụ thể. Đây là các lệnh YUM như listinstall.

Ví dụ:
$ 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

Nhắc nhở duy nhất bạn phải cẩn thận với regexes / globs, là nếu có các tệp trong shell của bạn được đặt tên sao cho chúng cũng khớp cl-*. Trong những trường hợp đó, shell của bạn sẽ mở rộng regex / global trước khi nó được trình bày cho YUM.

Vì vậy, thay vì chạy, yum list cl-*bạn sẽ chạy lệnh yum list cl-file, nếu có tệp khớp với regex / global cl-*.

Ví dụ:
$ 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

Bạn có thể bảo vệ chống lại điều này xảy ra bằng cách thoát khỏi ký tự đại diện như vậy:

$ 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

Vậy những dấu ngoặc

Tôi nghi ngờ bạn có các tệp trong thư mục cục bộ của bạn đang bị khớp khi bạn sử dụng [cl-*]làm đối số yum search. Các tệp này sau khi được khớp bởi shell, được chuyển đến yum searchlệnh nơi khớp với nơi tìm thấy.

Ví dụ:
$ 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.

LƯU Ý: Trận đấu ở trên được khớp với tên tệp của tôi cl-filevà không khớp cl-*như tôi dự định.


Oooh, tôi thấy bây giờ. Vâng, điều đó giải thích nó. Một nhận xét về nitpicking mặc dù cl-*không phải là một biểu thức thông thường, đó là globhoặc bất cứ điều gì nó được gọi. Đó là ngôn ngữ thông thường (theo thuật ngữ Chomskian), nhưng chúng tôi thường nói rằng một cái gì đó là một biểu thức chính quy nếu nó xác định một ngữ pháp cho ngôn ngữ thông thường (bằng cách sử dụng ít nhất ba thao tác cơ bản: ghép, thay đổi và sao Kleene).
wvxvw

@wvxvw - đúng rồi. Bạn bắt đầu với regex thuật ngữ và tôi chỉ dựa vào nó 8-).
slm

3

Chắc chắn là phiên bản yum khác nhau, sử dụng RHEL 6.5 ở đây với yum 3.2,29 Cẩn thận:
Bạn nên trích dẫn * để không khớp bất cứ thứ gì trong thư mục hiện tại thông qua shell globalbing ... Để biết thêm chi tiết về điều đó và một ví dụ thực tế, hãy xem câu trả lời sau: /unix//a/155157/83329

Dù sao, chỉ cần kiểm tra lại, cách duy nhất để thực sự tìm kiếm hiệu quả với tìm kiếm yum là bằng yum search all | grep foocách yum search foocho kết quả khá mờ. Nhưng yum list "foo-*"hoạt động đúng như mong đợi và chỉ có kết quả trong trường hợp của bạn có thể là gói cl-asdf.noarch.

Liếc nhanh qua tìm kiếm yum bugreports yum có vẻ cũng có những nhược điểm khác: https://bugs.launchpad.net/percona-server/+orms/580336/comments/2


1

Xin lỗi không thể bình luận vì vậy phải sử dụng một câu trả lời.

Bạn đã thử yum search cl-*hay yum list 'cl-*'chưa? Ít nhất là yum whatprovides */foonó hoạt động để tìm kiếm tên tệp, mặc dù đó là một trường hợp đặc biệt. Mặt khác, tôi cũng thường sử dụng
yum list all | grep -i foonhưng hãy cẩn thận với đầu ra đa dòng của yum, grep có thể chỉ hiển thị dòng đầu tiên, vì vậy có thể sử dụngyum list all | grep -iA1 foo

Ngoài ra còn có một số ví dụ hữu ích trong trang man bên dưới "Tùy chọn danh sách". Tài liệu bổ sung cũng có sẵn trực tiếp tại thượng nguồn tại http://yum.baseurl.org/ ví dụ: http://yum.baseurl.org/wiki/YumCommands hoặc có thể trực tiếp qua python: http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch


Tôi đã thử yum search cl-*chưa? - vâng tôi đã làm. Điều này không tìm thấy gì (có thể là phiên bản yum khác nhau? Tôi vẫn đang sử dụng FC18).
wvxvw

Chà, từ việc đọc trên trường hợp sử dụng có ý định yum search, kết hợp nó với các biểu thức / ký tự thông thường là dự phòng gấp đôi. yum searchđã thực hiện một tìm kiếm mờ, vì vậy sử dụng các ký tự đại diện là khá vô dụng. Nếu bạn muốn hạn chế tìm kiếm, hãy sử dụng yum list expressionhoặc yum list all | grep expression. Mặt khác, tôi khuyên bạn nên mở một yêu cầu nâng cao chống lại yum - chúc may mắn với điều đó: p
doktor5000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.