Grep具有多个关键字并输出多行

时间:2017-01-27 12:48:51

标签: linux grep

我想grep行包含所有3种不同的模式,并输出2个前面的行和1个下一行。

这是我没有多行输出的grep命令。现在我想添加上面提到的3个额外的行。我可以把-A和-B放在一起吗?或者我必须使用-C?我应该在哪里放置这些选项,所有这些选项都在三个条件下,或者首先或最后一个?

.then(data =>  this.setState(data))

这是示例输入

grep -e Melon -e Banana -e Lemon *txt | grep Tomato | grep Milk

预期输出

Egg Tomato    
Salad Coffee
Melon Tomato Milk
Noodle Salmon
Banana Potato Milk
Salmon Rice

1 个答案:

答案 0 :(得分:2)

您需要一个大型解决方案:上方两行和下一行模式:(Melon or Banana or Lemon) and Tomato and Milk

grep -A1 -B2 -E -e "(Tomato.*Milk|Milk.*Tomato).*(Melon|Banana|Lemon)" \
                -e "(Melon|Banana|Lemon).*(Tomato.*Milk|Milk.*Tomato)" \
                -e "Tomato.*(Melon|Banana|Lemon).*Milk" \
                -e "Milk.*(Melon|Banana|Lemon).*Tomato" *txt

仅限乐趣

使用awk

的另一种解决方案
awk '
    flag{print; flag=0}
    /Melon|Banana|Lemon/ && /Milk/ && /Tomato/{
        printf "%s\n%s\n%s\n",prev[0],prev[1],$0
        flag=1; next
    }
    {prev[0]=prev[1]; prev[1]=$0}' *txt