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


11

Fedora 文档说:

5.2。进阶搜寻

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

好吧,起初我以为这根本是错误的或过时的,因为没有正则表达式的已知语法可用于yum search,但是后来我发现了这一点yum search [cl-*]例如。但这却做了超凡脱俗的事情。它查找名称或描述中都没有“ c”或“ l”字母的事物。(我想要的是找到所有名称与cl-.*regexp 匹配的软件包。

我还发现很少有人建议将yum结果传递给grep,这当然可以解决问题。但是,从原则上讲,我想找出方括号中的内容是做什么的。如果yum实际上可以通过regexp搜索怎么办?

Answers:


12

用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

唯一需要注意的是regexes / glob,请注意,您的外壳中是否有文件被命名为也可以匹配cl-*。在这些情况下,您的外壳程序将先展开正则表达式/ glob,然后再提供给YUM。

因此,如果有一个匹配regex / glob的文件,则将yum list cl-*运行该命令yum list cl-file,而不是运行该命令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。这些文件在被shell匹配后,被传递到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-*不是正则表达式,但它是a glob或其他名称。它是一种常规语言(用Chomskian术语表示),但是如果它为常规语言定义了一种语法(通常使用至少三个基本操作:串联,变更和Kleene star),我们通常会说某种东西就是正则表达式。
wvxvw 2014年

@wvxvw-是的。您从术语正则表达式开始,而我只是倾向于使用正则表达式8-)。
slm

3

绝对不同的yum版本,在此处使用RHEL 6.5和yum 3.2.29 提防:
您应该引用*来通过shell globbing与当前目录中的任何内容都不匹配...有关此细节和实际示例,请参见后面的答案:/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

手册页中“列表选项”下面还有一些有用的示例。其他文档也可以直接从上游http://yum.baseurl.org/获得,例如http://yum.baseurl.org/wiki/YumCommands或直接通过python获得:http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch


我尝试了yum search cl-*吗?-是的,我做到了。这样一无所获(也许是不同的百胜版本?我仍在使用FC18)。
wvxvw

好吧,从阅读的预期用例开始yum search,将其与正则表达式/通配符结合使用是双重冗余的。yum search已经进行了模糊搜索,因此使用通配符几乎没有用。如果要限制搜索,请使用yum list expressionyum list all | grep expression。否则,我建议您针对yum提出增强请求-祝您好运:p
doktor5000
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.