grep -A com correspondência inversa - imprime apenas não correspondência no campo após

1

Eu tenho um arquivo que imprime várias ocorrências de '200 OK'. Estou interessado apenas na última ocorrência de '200 OK' que vem depois do padrão 'COMMAND'. No meu arquivo específico, "COMMAND" imprime 100 vezes. Ficaria assim:

otherdata
200 OK
otherdata 
200 OK
COMMAND
200 OK

Então eu uso o comando.

grep -A1 COMMAND file | grep -v '200 OK' 

Isso me dá a seguinte saída:

COMMAND xxxxx PASSWORD xxxxxx
--
COMMAND xxxxx PASSWORD xxxxxx
513 unknown user account
--
COMMAND xxxxxx PASSWORD xxxxxx
--
COMMAND xxxxxx PASSWORD xxxxxx
513 unknown user account
--
COMMAND xxxxxx PASSWORD xxxxxxx
--

Estou obtendo tudo que não seja o 200 OK, mas não preciso das linhas que contêm

COMMAND xxxxx PASSWORD xxxxx
---

Como posso obter a saída de apenas as linhas com algo diferente de 200 OK e a linha acima dela? Idealmente, quero que minha saída inclua apenas linhas como essa e nada mais. O 513 é apenas um exemplo, pode haver outros.

COMMAND xxxxx PASSWORD xxxxxx
513 user account unknown
    
por user53029 01.09.2016 / 16:40

1 resposta

4

Você pode fazer isso com sed :

sed -n -e '/COMMAND/{N;/200/! p;}' file

Isso usou -n para não imprimir linhas por padrão, então se uma linha corresponder a COMMAND , junte essa linha com a próxima linha ( N e, se isso não corresponder a 200 , imprima as linhas combinadas. / p>     

por 01.09.2016 / 16:53