1 votes

En utilisant grep ; comment afficher la Nième occurrence d'un motif ?

Utilisation grep ; comment faire apparaître le N th l'occurrence d'un modèle ?

Par exemple ; man sh |grep -A3 -- '-c' renverra plusieurs résultats.

Il se peut que je veuille isoler le 3 rd uniquement, de manière à ce que cela apparaisse :

--
    -c  Read commands from the command_string operand instead of from the standard input.  Special parameter 0
        will be set from the command_name operand and the positional parameters ($1, $2, etc.)  set from the
        remaining argument operands.
--

2voto

John1024 Points 15663

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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X