comment grep et imprimer les N lignes suivantes après le hit?

14

Je voudrais grep pour une occurrence dans un fichier texte, puis imprimer les N lignes suivantes après chaque occurrence trouvée. Des idées?

719016
la source

Réponses:

21

Grep a les options suivantes qui vous permettront de le faire (et ainsi de suite). Vous voudrez peut-être consulter la page de manuel pour plus d'informations:

  • -A nombre Imprime les lignes numériques du contexte final après chaque match. Voir aussi les options -B et -C.

  • -B num Imprime les lignes numériques du contexte principal avant chaque correspondance. Voir aussi les options -A et -C.

  • -C [num] Affiche les lignes numériques des contextes de début et de fin entourant chaque correspondance. La valeur par défaut est 2 et est équivalente à -A 2 -B 2. Remarque: aucun espace ne peut être laissé entre l'option et son argument.

Colin K
la source
7

Si vous avez GNU grep, c'est l' option -A/ --after-context. Sinon, vous pouvez le faire avec awk.

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename
geekosaur
la source
awk '/regex/{p=2} p > 0 {print $0; p--}' filename- fonctionne, pas le vôtre.
BladeMight
4

Utilisez l' -Aargument pour grepspécifier le nombre de lignes au-delà de la correspondance à afficher.

Ignacio Vazquez-Abrams
la source
3

Imprimer N lignes après les lignes correspondantes

Vous pouvez utiliser grepavec -A noption pour imprimer N lignes après les lignes correspondantes.

Par exemple:

$ 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

Autres options connexes:

Imprimer N lignes avant les lignes correspondantes

En utilisant -B noption, vous pouvez imprimer N lignes avant les lignes correspondantes.

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

Imprimer N lignes avant et après les lignes correspondantes

En utilisant -C noption, vous pouvez imprimer N lignes avant et après les lignes correspondantes.

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
utilisateur1336087
la source