Grep这,但不是-C选项

时间:2018-06-22 07:07:28

标签: shell unix grep

我对此有类似的问题:Unix grep regex containing 'x' but not containing 'y'

与众不同的是,我想用-C5在搜索过程中复制文件。

因此grep this myfile | grep -v that无法正常工作。

示例:假设myfile如下:

**
**
alpha
**
**
##
##
alpha beta
##
##

我想grep:

**
**
alpha
**
**

我将如何实现?

1 个答案:

答案 0 :(得分:2)

您可以将此gnu grep与PCRE正则表达式一起使用:

grep -C2 -P '^(?!.*beta).*alpha' file 

**
**
alpha
**
**

正则表达式'^(?!.*beta).*alpha'使用否定前瞻来匹配包含alpha但不包含beta的行。

如果gnu grep不可用:

awk '/alpha/ && !/beta/{print line[NR-2]; print line[NR-1]; n=NR}
     n && NR<=n+2; {line[NR]=$0}' file

**
**
alpha
**
**