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.
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 ... ...
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
Jean-Pierre Perroud, Switzerland,