假设我有几个字符串:str1和str2以及str3。
答案 0 :(得分:28)
这看起来像三个问题。将这些表达式放在一起的最简单方法是使用多个管道。这没有什么可耻的,特别是因为正则表达式(使用egrep)会笨拙,因为你似乎暗示你想要订单独立。
所以,按顺序,
grep str1 | grep str2 | grep str3
egrep'(str1 | str2 | str3)'
grep str1 | egrep'(str2 | str3)'
你可以使用egrep以与订单无关的方式执行“和”表单,但我认为你会发现更容易记住使用管道greps和顺序独立或使用正则表达式进行顺序独立。
答案 1 :(得分:8)
您无法合理地执行“全部”或“此加上其中任何一种”案例,因为grep
不支持预测。使用Perl。对于“任何”情况,它是egrep '(str1|str2|str3)' file
。
做“全部”案件的不合理方式是:
egrep '(str1.*str2.*str3|str3.*str1.*str2|str2.*str1.*str3|str1.*str3.*str2)' file
即。你建立了排列。当然,这是一件荒谬的事情。
对于“这加上其中任何一个”,同样地:
egrep '(str1.*(str2|str3)|(str2|str3).*str1)' file
答案 2 :(得分:4)
grep -E --color“string1 | string2 | string3 ....”
例如,查找我们的系统是使用AMD(svm)还是Intel(vmx)处理器,如果它是64位(lm)lm代表长模式 - 这意味着64位......
命令示例:
grep -E --color“lm | svm | vmx”/ proc / cpuinfo
-E必须找到多个字符串
答案 3 :(得分:-2)
就我个人而言,我是用perl做的,而不是试图用grep拼凑一些东西。
例如,对于第一个:
while (<FILE>)
{
next if ! m/pattern1/;
next if ! m/pattern2/;
next if ! m/pattern3/;
print $_;
}