我想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
答案 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