说我有一个包含以下内容的文件:
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不应该关心它们之间有多少个字符。如果有更好的工具,我很乐意使用它。
我已尝试以下操作并且没有结果:
grep package*el6*x86_64*
看到帖子和文档,我知道*并不意味着与shell中的相同。我正在寻找在正则表达式中使用它的等价物。希望这是有道理的。
答案 0 :(得分:5)
你的尝试非常接近。 shell规则中的*
与正则表达式中的.*
大致相当。 .
表示“任何字符”,*
表示“重复任意次数(包括零)。
在每个.
之前,您的正则表达式只需要*
。尾随*
不是必需的:
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
答案 1 :(得分:2)
不是最好的解决方案(实际上是无效的),但很容易记住:加入3个greps
grep "package" | grep "el6" | grep "x86_64"
答案 2 :(得分:0)
如果他们需要保持秩序,那么简单的grep:
grep "package.*el6.*x86_64" file.txt
会这样做。如果项目可以是任何顺序,您可以尝试管道:
cat file.txt | grep package | grep el6 | grep x86_64
只显示包含所有三行的行,但按任意顺序
答案 3 :(得分:-3)
你可以使用egrep
egrep 'package|el6|x86_64' name_of_file.txt