wvx*_*xvw 14 yum regular-expression
Fedora文档说:
5.2. 高级搜索
如果您不知道包的名称,请使用搜索或提供选项。或者,在任何 yum 搜索选项中使用通配符或正则表达式来扩大搜索条件。
好吧,起初我认为这完全是错误的或过时的,因为没有已知的正则表达式语法适用于yum search
,但后来我发现了这一点:yum search [cl-*]
例如。但它做了一些超凡脱俗的事情。它查找名称或描述中既没有“c”也没有“l”字母的事物。(我想要的是找到所有包,其名称将由正则cl-.*
表达式匹配。
我还发现很少有人建议将 yum 结果通过管道传输到grep
,这当然解决了问题。但是,原则上,我想找出方括号中的内容做了什么。如果yum
实际上可以通过正则表达式搜索怎么办?
slm*_*slm 16
搜索时通常不使用任何正则表达式 (globs),yum search
因为该命令search
已经在包名称及其摘要中查找子字符串。我怎么知道这个?当您使用yum search
.
仅名称和摘要匹配,对所有内容使用“全部搜索”。
注意:该字符串[cl-*]
在技术上是 Bash shell 中的一个 glob。
因此,您通常会使用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
Run Code Online (Sandbox Code Playgroud)
您必须小心使用正则表达式/glob 的唯一警告是,如果您的 shell 中存在命名为使得它们也匹配cl-*
. 在这些情况下,您的 shell 将在呈现给 YUM 之前扩展正则表达式/glob。
因此,如果有与 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
Run Code Online (Sandbox Code Playgroud)
您可以通过像这样转义通配符来防止这种情况发生:
$ 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
Run Code Online (Sandbox Code Playgroud)
我怀疑你有你的本地目录中,当你使用那些获得匹配的文件[cl-*]
作为参数yum search
。这些文件在被 shell 匹配后,被传递给yum search
命令 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.
Run Code Online (Sandbox Code Playgroud)
注意:上面的匹配与我的文件名匹配cl-file
,而不是cl-*
我想要的。
绝对不同的 yum 版本,在这里使用 RHEL 6.5 和 yum 3.2.29
注意:
您应该引用 * 以不通过 shell globbing 匹配当前目录中的任何内容...有关该内容的更多详细信息和实际示例,请参阅后面的答案:https://unix.stackexchange.com/a/155157/83329
无论如何,再次检查一下,使用 yum search 进行实际搜索的唯一方法是yum search all | grep foo
asyum search foo
给出非常模糊的结果。但是yum list "foo-*"
按预期工作,并且只会导致您的情况可能是包 cl-asdf.noarch 。
快速浏览相关的 yum 错误报告 yum 搜索似乎还有其他缺点:https : //bugs.launchpad.net/percona-server/+bug/580336/comments/2