Cours-Gratuit
  • Accueil
  • Blog
  • Cours informatique
home icon Cours gratuits » Cours informatique » Cours UNIX - Linux » Exercices Linux/Unix »

Articles similaires

  • TP unix commande grep - cut - uniq - sort - tubes
  • Exercice sur les expressions régulières la commande grep
  • Exercice sur les filtres et redirections Unix find, grep, ls, sort,
  • Exercice Unix sur la commande find
  • TP exercice unix ( commande grep )
  • Exercices unix - Filtres usuels - utilisation avancés des pipes
  • TP unix Gestion de repertoires fichiers utilisateurs
  • Exercice Unix sur les Jokers et les expressions régulières
  • Exercice de jointure sous UNIX la commande join
  • Exercice script unix shell - processus -
  • Exercice unix - commande find - entrées sorties -
  • Comment chercher et présenter la bonne information?

Documents similaires

  • Modèle de bon de commande sur Excel

  • Application Excel sur la gestion de commande de matériel scolaire

  • Modèle de tableau de suivi de commande pour fournisseur sur Excel

  • Guide complet pour apprendre à trader les options binaires

  • Modèle de bon de commande sur Word

  • Exemple de bon de commande du Maroc sous Excel

  • Lettre de motivation préparateur de commande

  • Modèles bon de commande fournisseur sous Excel

Exercice Unix sur la commande grep

Rédigé par GC Team, Publié le 19 Août 2010, Mise à jour le Jeudi, 19 Août 2010 17:16
Participez au vote ☆☆☆☆☆★★★★★

 

1.  Quelles sont les options de grep qui permettent d'obtenir des lignes de contexte (qui précèdent et/ou suivent la ligne où figure le mot) ?

2.  Comment faire apparaître le numéro de la ligne où figure le mot recherché ? Que se passe-t-il quand on demande également des lignes de contexte ?
3.  Comment faire pour afficher le nombre d'occurences du mot recherché ?
4.  Comment faire pour que grep ignore la casse des caractères (différence entre majuscules et minuscules) dans sa recherche ?
5.  Comment faire pour faire apparaître non pas les lignes où figurent le mot, mais les noms des fichiers ?
6.  Comment faire apparaître les lignes où ne figurent pas le mot recherché ?
7.  Comment faire apparaître les noms des fichiers ne contenant pas le mot recherché ?
8.  Comment faire pour que grep ne recherche que les lignes où figure le mot tel quel, et non pas ses variantes ? Par exemple : on cherche le mot «travail», mais pas «travailleur» ou «travailler».
9.  Comment faire pour chercher plusieurs mots à la fois en faisant apparaître les numéros des lignes ?

  1. Il y en a plusieurs, qui se recoupent :

    • -num : le numéro indique le nombre de lignes de contexte que l'on veut voir figurer avant et après la ligne où figure le mot recherché. Par exemple, si on veut trois lignes de contexte, avant et après la mot (soit sept lignes au total), on tape :
      grep -3 ...
      
    • -A num (after) : le numéro indique le nombre de lignes qui doivent suivre la ligne où figure le mot. Si on en veut quatre, on tapera :
      grep -A 4 ...
      
    • -B num (before)  : le numéro indique le nombre de lignes qui doivent précéder la ligne où figure le mot. Si on en veut dix, on tape :
      grep -B 10 ...
      
    • -C (context), qui donne deux lignes de contexte avant et après. En fait, les trois lignes suivantes sont strictement équivalentes :
      grep -2 ... 
      grep -C ... 
      grep -A 2 -B 2 ...
      
  2. C'est l'option -n (number) qui sert à cela; le numéro figure tout au début de la ligne, suivi d'un deux-points (:) et du texte. Par exemple :

    bireme ~ $ grep -n violon verlaine.tex
    12:des violons de l'automne
    

    Quand on fait une recherche dans plusieurs fichiers, le nom du fichier figure d'abord, puis le numéro de la ligne, et enfin le texte, le tout séparé par des deux-points. Par exemple :

    bireme ~ $ grep -n violon *
    verlaine.tex:12:des violons de l'automne
    orchestre:45:Cordes : contrebasse, violoncelle, alto, violons.
    
    Que se passe-t-il quand on demande également des lignes de contexte ?

    La disposition générale ne change pas, par contre, le signe utilisé pour séparer la ligne de son numéro est un tiret (-) quand il s'agit des lignes de contexte, et un deux-points quand il s'agit de la ligne voulue. Par exemple :

    bireme ~ $" grep -nC violon verlaine.tex
    10- 
    11-Les sanglots longs 
    12:des violons de l'automne 
    13-bercent mon coeur 
    14-d'une langueur monotone 
    
  3. On utilise l'option -c (count) :

    bireme ~ $ grep -c violon *
    verlaine.tex:1
    orchestre:1
    
  4. Par défaut, grep fait la différence entre les majuscules et les minuscules; pour invalider ce comportement, on utilise l'option -i (ignorecase).

  5. C'est l'option -l qui permet de faire cela : afficher les noms des fichiers où figure au moins une fois la chaîne de caractères recherchée.

  6. On veut en fait inverser le sens de la recherche : c'est l'option -v qui fait cela.

  7. On utilise l'option -L, qui affiche les noms de fichiers où ne figurent pas la chaîne de caractères recherchée. Il ne faut bien sûr pas confondre les options -l et -L...

  8. C'est l'option -w (comme word) qui sert à cela : un mot complet est délimité comme suit :

    • Début : la chaîne de caractères est placée au début d'une ligne, ou précédée d'un blanc, d'une tabulation ou d'une ponctuation.
    • Fin : la chaîne de caractère est placée en fin de ligne, ou suivie d'un blanc, d'une tabulation ou d'une ponctuation.

    Si donc on veut chercher «travail» et aucune forme dérivée de ce mot, on écrit :

    grep -w travail mon-fichier
    
  9. On veut chercher toutes les occurences des mots «terre» et «ciel» dans les deux premiers chapitres de la première partie de Germinal, avec les numéros des lignes. On propose deux solutions, la première utilisant les ressources de la syntaxe de grep, la seconde utilisant l'option -f avec un fichier.

    1. Syntaxe de grep : La structure \(mot1\|mot2\) permet de chercher plusieurs mots. Ici, on tape la ligne suivante :
      grep '\(ciel\|terre\)' fichier
      

      On met des apostrophes de part et d'autre de l'expression pour la protéger contre le shell, c'est-à-dire pour que le shell ne cherche pas à interpréter l'expression.

    2. Option «-f fichier» : dans un fichier quelconque, que nous appellerons liste, on indique les mots que l'on recherche : «ciel» et «terre». Chaque ligne correspond à un mot recherché. Il ne faut donc pas mettre de ligne comme
      terre ciel
      

      car le programme chercherait la chaîne de caractères «terre ciel», qui est assez improbable en français. Il ne faut pas non plus laisser de ligne blanche : le programme afficherait l'ensemble du texte.

    Quelle que soit la solution retenue, on veut ensuite afficher le numéro des lignes (option -n); d'autre part, pour que la recherche soit exhaustive, il vaut mieux que grep ne fasse pas de différence entre les majuscules et les minuscules, avec l'option -i (ignore case, ignorer la casse des caractères). Il faut aussi décider si on cherche les mots tels quels, sans leurs variantes (comme «terre» au pluriel), ou si on accepte ces variantes. Si on ne veut que le mot sans ses dérivés, on utilise l'option -w.

    Pour désigner les deux fichiers où faire la recherche, on peut les écrire littéralement :

    zola1.txt zola2.txt
    

    ou, mieux, utiliser les joker du shell :

    zola[12].txt
    

    [12] signifie «le caractère 1 ou le caractère 2».

    Finalement, on peut taper, au choix :

    grep -inw -f liste zola1.txt zola2.txt
    grep -inw -f liste zola[12].txt
    grep -inw '\(ciel\|terre\)'  zola1.txt zola2.txt
    grep -inw '\(ciel\|terre\)'  zola[12].txt
    

    Et on obtient :

    zola1.txt:13:ciel, le pavé se déroulait avec la rectitude d'une jetée, au 
    milieu de
    zola1.txt:36:brûlaient si haut dans le ciel mort, pareils à des lunes fumeuses. 
    Mais, au
    zola1.txt:50:besogne. Les ouvriers de la coupe à terre avaient dû travailler 
    tar d, on
    zola1.txt:124:terre, lorsqu'un accès de toux annonça le retour du charretier.  
    Le ntement,
    zola1.txt:191:bleues en plein ciel, comme des torches géantes. C'était d'une 
    tristesse
    zola1.txt:207:     Le manoeuvre, après avoir vidé les berlines, s'était assis à 
    terre,
    zola1.txt:222:fois avec tout le poil roussi, une autre avec de la terre jusque 
    dans le
    
    (...)
    

    Le résultat est un peu différent quand on n'utilise pas l'option -w.

 

  • Contactez-nous
  • A propos de nous
  • On recrute
  • Rechercher dans le site
  • Politique de confidentialité
  • Droit d'auteur/Copyright
  • Conditions générales d'utilisation
  • Plan du site
  • Accueil
  • Blog
  • Finance et compta.
  • Formations Pro.
  • Logiciels & Apps
  • Organisation
  • Cours informatique
  • Aide à la rédaction
  • Etudes et Metiers
  • Science et Tech
  • Titans de la Tech
id 11354 02