说我有一个文件,其中包含:
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