GREP ::..

Introduction :.

Le programme grep permet de faire des recherches, de trouver dans un fichier des chaînes de caractères, de mots ou des phrases. Il travail avec les expressions régulières et pour plus d'information, il faut lancer les commandes suivantes dans la console :

Une commande grep -V va nous donner la version de grep installée sur votre machine.

La pratique de la recherche :.

On va commencer simplement. Avec la commande suivante, on va per exemple rechercher le mot soleil dans le fichier "texte.txt"


$ grep soleil texte.txt

Si vous rechercher un suite de mots, par exemple "le grand soleil", vous devez alors cerner les mots recherchés par des apostrophes ou de guillemets. Cela dépend de la phrase. Si l'on recherche un mot avec une apostrophe, vous choisirez alors de placer des guillemets pour entourer les mots à chercher, par exemple avec "l'histoire"


$ grep 'le grand soleil' texte.txt
$ grep "La belle journée" fichier.csv
$ grep "l'hitoire" hist.doc

Pour effectuer une recherche d'un carcatère, d'un mot ou d'une phrase dans plusieurs fichiers, il faut jouer avec les jockers, par exemple en utilisant l'apostrophe.


$ grep 'le jour' *.txt

Voici une recherche plus complète avec l'option "-i" au début de la commande.
Cela permet de trouver les textes soit en majuscules et de minuscules.
Grep affiche les noms des fichiers sources au début des lignes, dans les résultats. On place une étoile 'en joker' pour étendre la recherche sur l'ensemble des fichier du répertoire courant.

Voici l'exemple :


jp@NEPTUNE:~/astro$ grep -i scorp *
brillantes.txt: Scorpion Alpha Antares 0.9 16h29 -26¦25'
brillantes.txt: Scorpion Gamma Schaula 1.6 17h33 -37¦06'
CALDWELL.TXT: 69 NGC  6302 17.0  13.7 -37.0  06.0  Scorpius        Planetary nebula  12.8       50     Bug Nebu
CALDWELL.TXT: 75 NGC  6124 16.0  25.6 -40.0  40.0  Scorpius        Open cluster       5.8       29
CALDWELL.TXT: 76 NGC  6231 16.0  54.0 -41.0  48.0  Scorpius        Open cluster       2.6       15
messier.txt: M004 N/A       Globular Cluster              Scorpio    6121   5.9   26.3  16h 23.6m  -26 32  Mid-Summer   
messier.txt: M006 Butterfly Cluster       Open Cluster    Scorpius   6405   4.2   15    17h 40.1m  -32 13  Mid-Summ
messier.txt: M007 Ptolemy's Cluster       Open Cluster    Scorpius   6475   3.3   80    17h 53.9m  -34 49  Mid-Summ
messier.txt: M080 N/A       Globular Cluster              Scorpius   6093   8.5    8.9  16h 17.0m  -22 59  Mid-Summer
jp@NEPTUNE:~/astro$ 

Avec l'option -l, la commande affiche le nom des fichiers qui contiennent le motif et avec l'option -L, alors on affiche que les fichier qui n'ont pas le motif

Dans l'exemple ci-dessous, avec la première commande, on recherche tout les fichier *.sh qui contiennent "$1"
avec la deuxième commande -L, on affiche tout les fichiers *.sh qui ne contiennent pas le "$"


jp@JUPITER ~/gsm
$ grep -l $1 *.sh
menu.sh

jp@JUPITER ~/gsm
$ grep -L $1 *.sh
diskn.sh
extr.sh
go.sh
go2.sh
netswc.sh
nettam.sh
noms.sh
puk0.sh
struc.sh
update.sh

jp@JUPITER ~/gsm

L'option -n permet de donner le numéro de la ligne affichée.


$ grep -n -i sylvain catalogue.csv 
556:Artiste, Sylvain Brecat ...
842:Pharmacien, Jean-Sylvain ...   
...

Quelques exemples plus techniques :.

L'utilisation des crochets [] permet de donner des intervalles ou des listes de caractères à chercher. Voici un premier exemple avec une recherche de numéros de téléphone dont les 8 premiers chiffres sont connus et dont les deux dernier doivent être soit 1,4 ou 7.


$ grep 07618421[147] annuaire.csv
$ grep 0791841.[147] annuaire.csv

Dans le cas de la deuxième recherche ci-dessus, le . et un joker qui peut avoir n'importe qu'elle valeur pour un caractère
Pour continuer, rechercher des lignes commençant par U,L et M . C'est le circonflexe qui donne l'info de début de ligne. Par exemple :


$ grep '^[ULM]' fichier.csv

La recherche avec la commande suivante permet de trouver les JEAN-L... , les JEAN-P... ou les JEAN-M...


$ grep 'JEAN-[LPM]' fichier

Pour une recherche étendue avec deux motifs différents, on peut utiliser le séparateur vertical (pipe), mais ne fonctionne que seulement si l'on active le mode "étendu" en le spécifiant d'entrée en ajoutant un -E après la commande grep ou en utilisant le programme egrep (mais il n'est plus recommandé!). Voici un exemple :


$ grep -E '123[45]|sol[eu]' texte.txt 

Dans ce cas nous voulions chercher dans le texte soit des valeurs 1234 ou 1235 ou un texte avec sole ou solu.

Dans la recherche suivante, nous souhaitons donner un intervalle de recherche sur les nombres 2561 à 2565. C'est le trait d'union qui fait la liaison de 1 à 5.


$ grep -e 256[1-5] text.csv



HTML5 Powered

Jean-Pierre Perroud, Switzerland,