Yum正規表現またはワイルドカード検索?


11

Fedora ドキュメントは言う:

5.2。高度な検索

パッケージの名前がわからない場合は、検索を使用するか、オプションを提供します。または、yum検索オプションでワイルドカードまたは正規表現を使用して、検索基準を広げます。

まあ、最初に私の正規表現のない既知の構文はでは動作しないであろうから、これは単に間違っているか、古くなっていると思ったyum searchが、その後、私が見つかりましたこのyum search [cl-*]たとえば。しかし、それは別世界の何かをします。名前または説明に「c」も「l」も含まれていないものを検索します。(私が欲しかったのは、cl-.*正規表現で名前が一致するすべてのパッケージを見つけることです。

またgrep、yumの結果をにパイプすることを提案している人もほとんどいませんでした。もちろん、問題を解決しました。しかし、原則として、角かっこ内の処理が何をするのかを知りたいのです。yum実際に正規表現で検索できる場合はどうなりますか?

回答:


12

YUMで検索

yum searchコマンドsearchはすでにパッケージ名とその要約内のサブストリングを検索しているため、で検索するときは通常、正規表現(グロブ)を使用しません。どうすればわかりますか?を使用するときにこれを通知するメッセージがありますyum search

名前と要約の一致のみ。すべてに対して「すべて検索」を使用します。

注:文字列[cl-*]は技術的にはBashシェルのグロブです。

したがって、通常は、使用したい文字列のフラグメントを探しますsearch。正規表現は、特定のパッケージを探すときに役立ちます。これらは、listおよびのようなYUMコマンド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

regexes / globsに注意する必要がある唯一の警告は、シェル内に、それらも一致するような名前のファイルがある場合cl-*です。これらの場合、シェルはYUMに提示される前に正規表現/グロブを展開します。

したがって、regex / globと一致するファイルがある場合yum list cl-*は、実行する代わりにコマンドを実行します。yum list cl-filecl-*

例えば:
$ 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何と呼ばれるものでもあります。これは通常の言語です(チョムスキー語で)が、通常、それが正規言語の文法を定義する場合(少なくとも3つの基本操作(連結、変更、およびクリーネスター)を使用して)は正規表現であると言います。
wvxvw

@wvxvw-そうです。あなたは専門用語の正規表現から始めました、そして私はそれにたどり着きました8-)。
slm

3

ここではRHEL 6.5とyum 3.2.29を使用しており、まったく異なるyumバージョンです。注意:シェルグロビングを使用
して、現在のディレクトリの何にも一致しないように*を引用符で囲む 必要があります。その詳細と実際の例については、後の回答を参照してください。/unix//a/155157/83329

とにかく、もう一度チェックしましたが、yum検索で実際に効果的に検索する唯一の方法は、かなりあいまいな結果yum search all | grep fooyum search foo与えることです。しかしyum list "foo-*"、期待通りに機能し、あなたのケースでのみ結果はおそらくパッケージcl-asdf.noarchになります。

関連するyumバグレポートをすばやく確認するyum検索には他の欠点があるようです: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が、yumの複数行の出力に注意してください。grepは最初の行しか表示しない場合があるため、yum list all | grep -iA1 foo

「リストオプション」の下のmanページにもいくつかの便利な例があります。追加のドキュメントは、直接に上流も可能ですhttp://yum.baseurl.org/例えばhttp://yum.baseurl.org/wiki/YumCommands:または多分直接のpython経由http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch


私は試しましたyum search cl-*か?-はい、そうしました。これは何も見つかりません(おそらく、yumのバージョンが異なるのですか?私はまだFC18を使用しています)。
wvxvw

まあ、の意図的な使用例を読むyum searchと、正規表現/ワイルドカードと組み合わせると二重の冗長になります。yum searchはあいまい検索をすでに実行しているため、ワイルドカードを使用してもほとんど役に立ちません。検索を制限する場合は、yum list expressionまたはを使用しますyum list all | grep expression。それ以外の場合は、yumに対する拡張リクエストを開くことをお勧めします-それで頑張ってください:p
doktor5000
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.