como grep e imprimir os próximos N linhas após o hit?

11

Eu gostaria de pesquisar uma ocorrência em um arquivo de texto e depois imprimir as N linhas seguintes após cada ocorrência encontrada. Alguma idéia?

    
por 719016 16.06.2011 / 17:46

4 respostas

16

O grep tem as seguintes opções que permitem fazer isso (e coisas parecidas). Você pode dar uma olhada na página de manual para obter mais informações:

  • -A num Imprime linhas numéricas de contexto à direita após cada correspondência. Veja também        as opções -B e -C.

  • -B num Imprime linhas numéricas do contexto principal antes de cada correspondência. Veja também        as opções -A e -C.

  • -C [num] Imprime linhas numéricas de contexto à esquerda e à direita ao redor de cada        partida. O padrão é 2 e é equivalente a -A 2 -B 2. Nota:        nenhum espaço em branco pode ser dado entre a opção e seu argumento.

por 16.06.2011 / 17:53
6

Se você tem o GNU grep , é a opção -A / --after-context . Caso contrário, você pode fazer isso com awk .

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename
    
por 16.06.2011 / 17:53
4

Use o argumento -A para grep para especificar quantas linhas além da correspondência serão geradas.

    
por 16.06.2011 / 17:52
1

Imprima N linhas depois das linhas correspondentes

Você pode usar a opção grep with -A n para imprimir N linhas depois de combinar linhas.

Por exemplo:

$ cat mytext.txt 
  Line1
  Line2
  Line3
  Line4
  Line5
  Line6
  Line7
  Line8
  Line9
  Line10

$ grep -wns Line5 mytext.txt -A 2
5:Line5
6-Line6
7-Line7

Outras opções relacionadas:

Imprima N linhas antes de combinar as linhas

Usando a opção -B n você pode imprimir N linhas antes de combinar linhas.

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5

Imprima N linhas antes e depois das linhas correspondentes

Usando a opção -C n , você pode imprimir N linhas antes e depois das linhas correspondentes.

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
    
por 18.06.2014 / 13:19