2017-09-13 45 views
0

我试图进行搜索的三个条件采用AND与grep3状态和grep的

我能够搜索b,ghkj这样的:

grep -e "b,.*ghkj" 

,但我无法搜索b,ghkjuuuuuu这样的:

grep -e "b,.*ghkj.*uuuuuu" 

如何创建一个3条件和搜索grep

+0

很难理解你在写什么。添加一些输入样本并发布期望的结果 – RomanPerekhrest

+0

我明白什么是问题所在,我必须等待当前建议的编辑先清除队列 –

+0

我需要在具有三个条件的文件linux中,而不是或 –

回答

2

有一个在grep的无AND运算(或AFAIK任何正则表达式语言)

grep -E -e 'aaa.*bbb' 

匹配,其包括“AAA”,随后通过任何数目的字符(.*),然后“BBB”的任何线,这模拟AND是因为它按顺序匹配包含'aaa'和'bbb'的行,但它不会匹配'bbbaaa'。要获得包含'aaa'和'bbb'的所有行,我们可以使用OR(|)来涵盖所有可能的情况。

grep -E -e 'aaa.*bbb|bbb.*aaa' 

虽然这种策略不能很好地扩展到3个或更多的子句,因为案例数呈指数增长。

相反,我们可以使用管道来实现AND。

grep -E -e 'aaa' file | grep -E -e 'bbb' | grep -E -e 'ccc' 
  1. 第一grep的发现在file所有行包含 'AAA',并且输出它们。
  2. 第二个grep取这个输出并找到所有包含'bbb'的行并输出它们。
  3. 第三个grep取得这个输出并找到所有包含'ccc'的行并输出它们。

的最终输出将只从线file包含“AAA”和“BBB”以任何顺序“CCC”。

+0

,正是我需要做的 shell_exec('grep -E -e'。$ yeasrs。'/ var/test/test2 /'。$ name_file | grep -E -e'。$ id。'| grep -E -e'。$ id_user。'“); 不工作 –

+0

shell不会展开用单引号括起来的变量,尝试使用''grep -E -e“$ years”“/ var/test/test2/$ name_file“| grep -E -e“$ id”| grep -E -e“$ id_user”'' –

+0

同样的问题there'is是一个错误引号 –