como grep e imprimir as próximas N linhas após o hit?

16

Gostaria de grep para uma ocorrência em um arquivo de texto e, em seguida, imprimir as seguintes N linhas após cada ocorrência encontrada. Alguma ideia?

719016
fonte

Respostas:

23

O Grep possui as seguintes opções que permitirão que você faça isso (e coisas assim). Você pode dar uma olhada na página de manual para obter mais informações:

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

  • -B num Imprime num linhas de contexto principal antes de cada partida. Consulte também as opções -A e -C.

  • -C [num] Imprime linhas numéricas do contexto inicial e final ao redor de cada correspondência. O padrão é 2 e é equivalente a -A 2 -B 2. Nota: nenhum espaço em branco pode ser fornecido entre a opção e seu argumento.

Colin K
fonte
7

Se você possui o GNU grep, é a opção -A/ --after-context. Caso contrário, você pode fazê-lo awk.

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename
geekosaur
fonte
1
awk '/regex/{p=2} p > 0 {print $0; p--}' filename- funciona, o seu não.
precisa saber é o seguinte
4

Use o -Aargumento para grepespecificar quantas linhas além da correspondência serão exibidas.

Ignacio Vazquez-Abrams
fonte
3

Imprimir N linhas após as linhas correspondentes

Você pode usar grepcom a -A nopção para imprimir N linhas após as linhas correspondentes.

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:

Imprimir N linhas antes das linhas correspondentes

Usando a -B nopção, você pode imprimir N linhas antes de combinar as linhas.

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

Imprimir N linhas antes e depois das linhas correspondentes

Usando a -C nopção, 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
user1336087
fonte