L'événement que vous souhaitez n'est pas le deuxième Il s'agit de l'événement troisième . Pour obtenir la troisième occurrence de -c
avec trois lignes de contexte :
$ man sh | awk '/-c/{n++; if (n==3)f=3;} f{print;f--;}'
-c Read commands from the command_string operand instead of from the standard input. Special param
eter 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.)
set from the remaining argument operands.
Comment cela fonctionne-t-il ?
awk lit implicitement son entrée ligne par ligne. Ce script utilise deux variables. n
garde la trace du nombre de fois où nous avons vu -c
. f
permet de savoir combien de lignes nous sommes censés imprimer.
-
/-c/{n++; if (n==3)f=3;}
Si nous atteignons une ligne contenant -c
puis incrémente le compte n
un par un. Si n
est égal à trois, puis définir f
à trois.
-
f{print;f--;}
Si f
est différent de zéro, imprimer la ligne et décrémenter f
.
Solution alternative
$ man sh | grep -A3 -m3 -- -c | tail -n4
-c Read commands from the command_string operand instead of from the standard input. Special param
eter 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.)
set from the remaining argument operands.
En -m3
indique à grep de ne renvoyer que les trois premiers résultats. tail -n4
renvoie les quatre dernières lignes parmi ces correspondances. Si les deuxième et troisième correspondances avec -c
se trouvaient dans le nombre de lignes du contexte, il se peut que cette sortie ne corresponde pas à ce que vous souhaitez.