Grep para várias strings, mostra o número de linhas após uma das strings (mas não a outra)

2

Como o título sugere, eu gostaria de pesquisar um arquivo para várias strings e, para uma string específica, mostrar as 5 linhas seguintes também.

cat file | grep -e 'string1' -e 'string2'

funciona, claro, mas eu gostaria de ter algo como

cat file | grep -e 'string1' -e -A 5 'string2'

Como posso fazer isso de modo que (eu estou assumindo o uso da opção -A 5) ele mostra apenas as linhas contendo string1 e apenas as linhas contendo string2 e as 5 linhas após string2, mas não as 5 linhas após string1?

EDIT: acabou de trabalhar com o awk:

cat file | awk '/string1/{c=1}/string2/{c=5}{while(c-->0){print;getline}}'
    
por Gilles 17.09.2015 / 11:47

3 respostas

0

Você não pode fazer isso usando uma vez grep . Você precisa usar dois grep instâncias:

grep 'string1' file; grep -A 5 'string2' file

Se você deseja executar o segundo após o sucesso do primeiro:

grep 'string1' file && grep -A 5 'string2' file
    
por 17.09.2015 / 12:24
0

sobre o código awk

awk '/string1/{if ( c<=0 ) c=1 ;}/string2/{c=5}{ if (c-->0) print;}' file
  • não cat ... | awk , awk pode ler o arquivo.
  • Eu reorganizo o teste (se string1 for uma linha após string2, interromperá a impressão na solução do OP)
por 17.09.2015 / 12:46
0

Sed solução:

sed -n '/string2/,+4{p;b;};/string1/p' file

my sed também aceita ~ em vez de +

    
por 17.09.2015 / 13:44