Grep this mais pas cela avec l’option -C

J’ai une question similaire à ceci: regex grep Unix contenant ‘x’ mais ne contenant pas ‘y’

La torsion est que, je voudrais grep les fichiers autour de ma recherche avec -C5.

Donc le grep this myfile | grep -v that grep this myfile | grep -v that ne fonctionnera pas.

exemple: laissez dire que myfile est comme suit:

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

Je voudrais grep:

 ** ** alpha ** ** 

Comment pourrais-je y arriver?

Vous pouvez utiliser ce gnu grep avec une regex PCRE:

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

 ** ** alpha ** ** 

Regex '^(?!.*beta).*alpha' utilise un lookahead négatif pour correspondre à une ligne contenant de l’ alpha n’importe où mais ne contient pas de beta .

Si gnu grep n’est pas disponible:

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

 ** ** alpha ** **