在string中的grep multipe通配符

说我有一个文件,其中包含:

Release 2.1 OS: RHEL File: package_el6_2.0.1.1_x86_64.rpm Release 2.1 OS: RHEL File: package_el6_2.0.1.1_i686.rpm Release 2.1 OS: RHEL File: package_el7_2.0.1.1_x86_64.rpm Release 2.1 OS: RHEL File: package_el7_2.0.1.1_i686.rpm 

我想grep和匹配只包含“package”,“el6”和“x86_64”

我将如何去做一个使用grep的单线程呢? 该行必须匹配所有三个和grep不应该关心有多less个字符之间。 如果有一个更好的工具,我很乐意使用它。

我试过以下,没有结果:

 grep package*el6*x86_64* 

看到post和文档,我明白*并不意味着与shell中的相同。 我正在寻找相当于它在正则expression式中使用。 希望这是有道理的。

你的尝试非常接近。 *在壳体glob术语大致相当于.*在正则表达式。 . 意思是“任何字符”, *表示“重复任意次数(包括零)”。

你的正则表达式只是需要. 在每个*之前。 尾随*不是必需的:

 package.*el6.*x86_64 

以下是您的输入示例运行:

 grep 'package.*el6.*x86_64' <<< "Release 2.1 OS: RHEL File: package_el6_2.0.1.1_x86_64.rpm Release 2.1 OS: RHEL File: package_el6_2.0.1.1_i686.rpm Release 2.1 OS: RHEL File: package_el7_2.0.1.1_x86_64.rpm Release 2.1 OS: RHEL File: package_el7_2.0.1.1_i686.rpm" 

打印:

 Release 2.1 OS: RHEL File: package_el6_2.0.1.1_x86_64.rpm 

不是最好的解决方案(实际上是不够的),但真的很容易记住:加入3 greps

 grep "package" | grep "el6" | grep "x86_64" 

如果他们保证有条不紊,那么简单的一句话就是:

 grep "package.*el6.*x86_64" file.txt 

会做到这一点。 如果项目可以以任何顺序,您可以尝试一个管道:

 cat file.txt | grep package | grep el6 | grep x86_64 

将只显示包含全部三行的行,但以任何顺序显示

你可以使用egrep

 egrep 'package|el6|x86_64' name_of_file.txt