come grep e stampare le prossime N linee dopo il colpo?


16

Vorrei richiedere un'occorrenza in un file di testo, quindi stampare le seguenti N righe dopo ogni occorrenza trovata. Qualche idea?

Risposte:


23

Grep ha le seguenti opzioni che ti permetteranno di farlo (e cose simili). Potresti dare un'occhiata alla pagina man per maggiori informazioni:

  • -A num Stampa num linee di contesto finale dopo ogni corrispondenza. Vedi anche le opzioni -B e -C.

  • -B num Stampa num line del contesto iniziale prima di ogni corrispondenza. Vedi anche le opzioni -A e -C.

  • -C [num] Stampa le linee num del contesto iniziale e finale che circonda ogni corrispondenza. Il valore predefinito è 2 ed equivale a -A 2 -B 2. Nota: non è possibile assegnare spazi bianchi tra l'opzione e il suo argomento.


7

Se hai GNU grep, è l' opzione -A/ --after-context. Altrimenti, puoi farlo con awk.

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename

1
awk '/regex/{p=2} p > 0 {print $0; p--}' filename- funziona, il tuo no.
BladeMight


3

Stampa N righe dopo aver abbinato le righe

È possibile utilizzare grepcon l' -A nopzione per stampare N righe dopo aver abbinato le righe.

Per esempio:

$ 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

Altre opzioni correlate:

Stampa N righe prima di abbinare le righe

Utilizzando l' -B nopzione è possibile stampare N linee prima di abbinare le linee.

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

Stampa N righe prima e dopo le righe corrispondenti

Utilizzando l' -C nopzione è possibile stampare N linee prima e dopo le linee corrispondenti.

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.