3条件和grep

时间:2017-09-13 18:15:01

标签: regex grep

我正在尝试搜索使用AND与grep

连接的三个条件

我可以像这样搜索b,ghkj

grep -e "b,.*ghkj" 

但我无法像这样搜索b, AND ghkjuuuuuu

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

如何创建3条件并使用grep进行搜索?

1 个答案:

答案 0 :(得分:2)

grep(或任何正则表达式语言afaik)中没有AND运算符

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'输出它们。
  4. 最终输出只会是来自file的行,其中包含' aaa' AND' bbb' AND' ccc'以任何顺序。