यम नियमित अभिव्यक्ति या वाइल्डकार्ड खोज?


12

फेडोरा प्रलेखन कहता है:

5.2। उन्नत खोजें

यदि आप पैकेज का नाम नहीं जानते हैं, तो खोज का उपयोग करें या विकल्प प्रदान करें। वैकल्पिक रूप से, खोज क्रिटेरिया को व्यापक बनाने के लिए किसी भी यम खोज विकल्प के साथ वाइल्ड कार्ड या नियमित अभिव्यक्ति का उपयोग करें।

खैर, पहले मुझे लगा कि यह गलत या पुराना है, क्योंकि कोई भी नियमित वाक्य का कोई सिंटैक्स काम नहीं करेगा yum search, लेकिन तब मुझे यह पता चला : yum search [cl-*]उदाहरण के लिए। लेकिन यह कुछ और ही करता है। यह उन चीजों को ढूंढता है जिनके नाम या विवरण में "सी" या "एल" अक्षर नहीं हैं। (मैं जो चाहता था वह सभी पैकेजों को ढूंढना था, जिनके नाम cl-.*regexp से मेल खाते होंगे ।

मुझे यह भी पता चला है कि कुछ लोगों को यम के पाइप का सुझाव दिया जाता है grep, जो निश्चित रूप से समस्या को हल करता है। लेकिन, सिर्फ सिद्धांत पर, मैं यह पता लगाना चाहता हूं कि वर्ग कोष्ठक में क्या किया। क्या होगा अगर yumवास्तव में regexp द्वारा खोज कर सकते हैं?

जवाबों:


13

YUM के साथ खोज करना

आप आमतौर पर किसी भी नियमित अभिव्यक्ति (ग्लब्स) का उपयोग नहीं करते हैं, yum searchक्योंकि कमांड searchपहले से ही पैकेज नामों और उनकी सारांश के भीतर उप-स्ट्रिंग की तलाश कर रहा है। मुझे इसके बारे में कैसे पता है? एक संदेश है जो आपको यह बताता है कि आप कब उपयोग करते हैं yum search

नाम और सारांश केवल मेल खाते हैं, हर चीज के लिए "सभी खोजें" का उपयोग करें।

नोट: स्ट्रिंग [cl-*]तकनीकी रूप से बैश शेल में एक ग्लोब है।

तो आप आम तौर पर उन स्ट्रिंग्स के टुकड़ों की तलाश करते हैं जो आप चाहते हैं search। जब आप विशेष पैकेज की तलाश में होते हैं, तो नियमित अभिव्यक्तियाँ खेल में आती हैं। ये YUM कमांड हैं जैसे listऔर install

उदाहरण के लिए:
$ 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

एकमात्र कैगीट जो आपको रेगेक्स / ग्लब्स के साथ सावधान रहना है, अगर आपके शेल के भीतर फाइलें हैं जो इस तरह नामित हैं कि वे भी मेल खाएंगे cl-*। उन मामलों में आपका शेल यम को प्रस्तुत किए जाने से पहले रेगेक्स / ग्लोब का विस्तार करेगा।

तो दौड़ने के बजाय yum list cl-*आप कमांड चला रहे होंगे yum list cl-file, अगर वहाँ कोई फ़ाइल regex / glob से मेल खाती हो cl-*

उदाहरण के लिए:
$ 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

वाइल्डकार्ड से बचकर आप ऐसा कर सकते हैं।

$ 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

तो कोष्ठक के बारे में क्या

मुझे संदेह है कि आपके पास अपनी स्थानीय निर्देशिका में फाइलें हैं जो कि आपके द्वारा [cl-*]तर्क के रूप में उपयोग किए जाने पर मेल खा रही हैं yum search। शेल द्वारा मिलान किए जाने के बाद इन फ़ाइलों को उस yum searchकमांड में पास किया गया, जहां मैच तब मिले थे।

उदाहरण के लिए:
$ 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.

नोट: ऊपर दिया गया मिलान मेरी फ़ाइल के नाम से मेल खाता था cl-file, न कि cl-*जैसा मैंने इरादा किया था।


ऊह, मैं अब देखता हूं। खैर, यह बताते हैं। हालांकि cl-*, यह एक नियमित अभिव्यक्ति नहीं है, लेकिन यह एक globया एक टिप्पणी है । यह एक नियमित भाषा है (चॉम्स्कियन शब्दों में), लेकिन हम आमतौर पर कहते हैं कि कुछ एक नियमित अभिव्यक्ति है यदि यह नियमित भाषा के लिए एक व्याकरण को परिभाषित करता है (कम से कम तीन बुनियादी कार्यों का उपयोग करके: समाकलन, परिवर्तन और क्लेन स्टार)।
wvxvw

@wvxvw - यह सही है। आपने शब्दावली रीगेक्स के साथ शुरुआत की और मैं सिर्फ 8-10 में झुक गया।
SLM

3

निश्चित रूप से अलग यम संस्करण, RHEL 6.5 का उपयोग यम 3.2.29 के साथ यहां करें। खबरदार:
आपको शेल ग्लोबिंग के माध्यम से वर्तमान निर्देशिका में कुछ भी मेल न करने के लिए * उद्धरण देना चाहिए ... उस पर अधिक विवरण और एक व्यावहारिक उदाहरण के लिए, बाद का जवाब देखें: https://unix.stackexchange.com/a/155157/83329

वैसे भी, बस फिर से जाँच की, वास्तव में yum खोज के साथ प्रभावी ढंग से खोज करने के लिए एक ही रास्ता के yum search all | grep fooरूप yum search fooमें सुंदर फजी परिणाम देता है। लेकिन yum list "foo-*"उम्मीद के मुताबिक काम करता है, और केवल आपके मामले में परिणाम शायद पैकेज cl-asdf.noarch होगा।

संबंधित यम बग्रेस्पोर्ट्स यम सर्च पर त्वरित रूप से नज़र रखने से अन्य कमियां भी होती हैं: https://bugs.launchpad.net/percona-server/+bug/580336/comments/2


1

क्षमा करें, अभी तक टिप्पणी नहीं कर सकते हैं इसलिए उत्तर का उपयोग करना होगा।

क्या आपने कोशिश की yum search cl-*या yum list 'cl-*'? कम से कम yum whatprovides */fooइसके लिए फ़ाइल नाम खोजने के लिए काम करता है, हालांकि यह एक विशेष मामला है। अन्यथा मैं भी अक्सर उपयोग करता हूं,
yum list all | grep -i fooलेकिन यम के बहुस्तरीय उत्पादन से सावधान रहें, grep केवल पहली पंक्ति दिखा सकता है, इसलिए शायद उपयोग करेंyum list all | grep -iA1 foo

"सूची विकल्प" के नीचे मैन पेज में कुछ उपयोगी उदाहरण भी हैं। अतिरिक्त दस्तावेज़ भी सीधे पर नदी के ऊपर उपलब्ध है http://yum.baseurl.org/ जैसे http://yum.baseurl.org/wiki/YumCommands : या शायद सीधे अजगर के माध्यम से http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch


क्या मैंने कोशिश की yum search cl-*? - हाँ, मैंने किया। यह कुछ भी नहीं मिल सकता है (शायद अलग यम संस्करण? मैं अभी भी FC18 का उपयोग कर रहा हूं)।
wvxvw

खैर, के लिए उपयोग किए गए मामले पर पढ़ने से yum search, नियमित अभिव्यक्ति / वाइल्डकार्ड के साथ संयोजन डबल-निरर्थक है। yum searchपहले से ही एक फजी खोज करता है, इसलिए वाइल्डकार्ड का उपयोग करना बहुत बेकार है। यदि आप अपनी खोज में बाधा डालना चाहते हैं, तो उपयोग करें yum list expressionया yum list all | grep expression। नहीं तो मेरा सुझाव है कि आप यम के खिलाफ एक वृद्धि का अनुरोध खोलें - इसके साथ शुभकामनाएँ: p
doktor5000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.