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

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

Fedoraの帽子文書説明する:

5.2。高度な検索

パッケージ名がわからない場合は、検索を使用するか、オプションを指定してください。または、yum検索オプションと一緒にワイルドカードまたは正規表現を使用して検索基準を広げることもできます。

まあ、最初は一緒に使うことができる既知の正規表現構文がないので、これは完全に間違っているか古いと思いましたが、後でyum search知りました。これyum search [cl-*]例えば。しかしそれは別の世界的な仕事をします。名前または説明に「c」または「l」文字が含まれていないコンテンツを見つけます。 (私が望むのは、名前が正規表現に一致するすべてのパッケージを見つけることです)cl-.*

私はyumの結果にパイピングすることを提案する人をほとんど見つけませんでした。grepこれは間違いなく問題を解決します。しかし、原則として、角かっこ内の内容が何をしているのか知りたいです。yum実際に正規表現で検索できればどうでしょうか?

答え1

YUMで検索

yum search通常、コマンドはパッケージsearch名とそのダイジェスト内の部分文字列をすでに見つけるため、検索では正規表現(glob)は使用されません。これをどうやって知ることができますか?使用時にこれを知らせるメッセージが表示されますyum search

名前とスニペットのみが一致します。すべてのアイテムにすべて検索を使用してください。

メモ:技術的には、この文字列[cl-*]はBashシェルのglobです。

したがって、通常は目的の文字列を見つけます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

regex / globに注意すべき唯一の注意点は、シェルに同じ名前のファイルがある場合ですcl-*。この場合、シェルは YUM 拡張に提供する前に regex/glob を解析します。

したがって、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 searchyum 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-*

答え2

ここでは、完全に異なるyumバージョン、RHEL 6.5とyum 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パッケージです。

関連するyumバグレポートを簡単に見てみると、yum検索には他の欠点があるようです。https://bugs.launchpad.net/percona-server/+bug/580336/comments/2

答え3

申し訳ありません。まだコメントできないため、回答を使用する必要があります。

yum search cl-*まだ試してみましたyum list 'cl-*'か?yum whatprovides */foo特別なケースではありますが、少なくともファイル名を検索するために使用できます。それ以外の場合はよく使用します
yum list all | grep -i fooが、yumの複数行出力に注意してください。 grepは最初の行だけを表示できるため、おそらく使用することもできます。yum list all | grep -iA1 foo

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

関連情報