Grep padrões em linhas selecionadas

2

Como manter linhas contendo pattern 1 apenas se a próxima linha contiver pattern 2 e começar com pattern 3 ?

Exemplo: mantenha a linha iniciando com A apenas se a próxima linha começar com B e contiver o padrão B1

Arquivo de entrada

A   item1A
B   item1B2
A   item2A
A   item3A
B   item3B1
B   item3CB1
B   item3B2
A   item5A
B   item5B1
A   item6A

Resultado esperado:

A   item3A
B   item3B1
B   item3CB1
A   item5A
B   item5B1

(No momento, estou tentando com grep -e ^A -e B1 , mas o efeito colateral é que todas as linhas A s são mantidas)

    
por dovah 05.08.2014 / 16:26

1 resposta

2

com pcregrep :

pcregrep -M '^(A.*\n)?B.*B1'

com awk :

awk '
  /^B.*B1/ {if (p && last ~ /^A/) print last; print; p=0; next}
  {p=1; last=$0}'
    
por 05.08.2014 / 16:31

Tags