Yum 正则表达式或通配符搜索?

Yum 正则表达式或通配符搜索?

软呢帽文档说:

5.2.高级搜索

如果您不知道包的名称,请使用搜索或提供选项。或者,使用通配符或正则表达式与任何 yum 搜索选项来扩大搜索条件。

好吧,一开始我认为这完全是错误的或过时的,因为没有已知的正则表达式语法可以与 一起使用yum search,但后来我发现yum search [cl-*]例如。但它却做了一些超凡脱俗的事情。它查找名称或描述中既没有“c”也没有“l”字母的内容。 (我想要的是找到所有名称与正则表达式匹配的包cl-.*

我还发现很少有人建议将 yum 结果通过管道传输到grep,这当然可以解决问题。但是,原则上,我想找出方括号中的东西做了什么。如果yum实际上可以通过正则表达式搜索怎么办?

答案1

用 YUM 搜索

搜索时通常不使用任何正则表达式(glob),yum search因为该命令search已经在包名称及其摘要中查找子字符串。我怎么知道这个?当您使用 时,会有一条消息告诉您这一点yum search

仅名称和摘要匹配,对所有内容使用“搜索全部”。

笔记:从技术上讲,该字符串[cl-*]是 Bash shell 中的一个 glob。

因此,您通常会查找所需的字符串片段search。当您寻找特定的包时,正则表达式就会发挥作用。这些是 YUM 命令,例如listinstall

例如:
$ 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

您必须小心使用正则表达式/glob 的唯一警告是,您的 shell 中是否有文件的命名方式也与cl-*.在这些情况下,您的 shell 将在将正则表达式/glob 呈现给 YUM 之前对其进行扩展。

因此,如果存在与 regex/glob 匹配的文件,yum list cl-*您将运行 command ,而不是运行。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.这些文件被 shell 匹配后,被传递到yum search命令 where matches where 然后找到。

例如:
$ 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 谨防:
您应该通过 shell 通配符引用 * 来不匹配当前目录中的任何内容...有关该内容的更多详细信息和实际示例,请参阅后面的答案:https://unix.stackexchange.com/a/155157/83329

无论如何,再次检查一下,使用 yum search 实际有效搜索的唯一方法是yum search all | grep fooasyum search foo给出相当模糊的结果。但yum list "foo-*"效果正如预期的那样,并且在您的情况下唯一的结果可能是包 cl-asdf.noarch 。

快速浏览一下相关的 yum bugreports yum search 似乎还有其他缺点: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

在“List Options”下面的手册页中还有一些有用的示例。其他文档也可直接在上游获取:http://yum.baseurl.org/例如http://yum.baseurl.org/wiki/YumCommands或者直接通过 python:http://yum.baseurl.org/wiki/YumCodeSnippet/YumSearch

相关内容