diff --git a/00TODO b/00TODO index 2906afd..4922ca1 100644 --- a/00TODO +++ b/00TODO @@ -93,7 +93,6 @@ cours/images/xfig.html cours/index.html cours/rcs.html cours/unix/cercles.html -cours/unix/chercher.html cours/unix/communiquer.html cours/unix/disquettes.html cours/unix/divers.html diff --git a/unix/chercher.tml b/unix/chercher.tml new file mode 100644 index 0000000..8246819 --- /dev/null +++ b/unix/chercher.tml @@ -0,0 +1,233 @@ + + + +
+grep
mot fichiers
+grep
mot fichiers sert à retrouver
+une chaîne de caractères dans des fichiers (zgrep
, beaucoup moins
+standard, s'utilise avec les fichiers compressés). Nous n'entrerons pas dans
+les détails de la syntaxe. Il suffit de savoir que :
+
*.tex |
+(étoile point tex) | +signifie « n'importe quel fichier .tex »
+(*.tex signifie « tout ce qui ne commence pas par un point et
+qui finit par .tex »). |
+
**/ |
+(étoile étoile) | +désigne le répertoire courant et tous ses sous-répertoires. | +
+Donc : +
+ +Pour chercher «coucou» dans | +On tape | +
---|---|
Tous les fichiers .tex du répertoire où l'on se trouve |
+ grep coucou *.tex |
+
Tous les fichiers du répertoire où l'on se trouve | + grep coucou * |
+
Tous les fichiers .tex du répertoire courant et de ses
+sous-répertoires |
+ grep coucou **/*.tex |
+
Tous les fichiers du répertoire courant et de ses sous-répertoires | + grep coucou **/* |
+
+Par exemple, Toto cherche le mot «travail» dans tous les fichiers
+.tex
du répertoire où il se trouve :
+
+corvette ~ $ grep travail *.tex
+caire.tex:les voit presque tous les matins, travailler par équipes de deux ou
+jordanie.tex:méridionale, le socle ancien apparaît. Le travail de l'érosion dans les
+jordanie.tex:Le pays compte également sur les remises des travailleurs expatriés qui, au
+
+
+
+Quand plusieurs fichiers sont parcourus, grep
indique dans quel
+fichier se trouve le mot demandé (mot au sens de «chaîne de caractères»).
+
grep
+Il y a différentes options à grep
, dont :
+
grep -n
: indique le numéro de la ligne où
+figure le mot.
+grep -C
( contexte) : fait figurer les deux
+lignes qui précèdent et suivent la ligne où figure le mot recherché.
+grep -i
(ignore case) : fait ignorer la
+casse des caractères (différence entre majuscules et minuscules).
+grep -c
(count) : indique le nombre de lignes
+où figure au moins une fois le mot recherché dans chacun des fichiers passés
+en revue.
++Bien entendu, ces options sont compatibles entre elles : +
+ ++corvette ~ $ grep -nc travail caire.tex +caire.tex-371-société. On compte environ 40\,000 de ces éboueurs chiffonniers qui +caire.tex-372-vivent dans de misérables bidonvilles aux abords de la capitale. On +caire.tex:373:les voit presque tous les matins, travailler par équipes de deux ou +caire.tex-374-trois hommes, habillés comme des épouvantails, avec des chapeaux de +caire.tex-375-paille et de vieux vêtements hétéroclites; accompagnés de leurs +corvette ~ $ grep -c travail *.tex +caire.tex:1 +egypte.tex:0 +jordanie.tex:2 +syrie.tex:0 ++ +
+Défilement : il peut arriver que le mot recherché figure +très souvent, et qu'une série de lignes se mettent à défiler sur l'écran, +parce qu'elle n'ont pas la place d'y figurer toutes. Dans ce cas, vous pouvez +taper +
+ +grep machin * | less+ +
+Le |
( pipe en anglais : tuyau) connecte la sortie
+standard d'une commande (c'est-à-dire le résultat visible de cette
+commmande) sur l'entrée standard d'une autre commande (ici
+less
); dans notre cas, cela signifie que les lignes produites
+par grep
pourront être lues avec less
, comme un
+fichier.
+
+Lignes parasites : grep
passe en revue tous
+les répertoires et fichiers; quand on ne lui précise pas la nature du fichier
+(*
et non pas *.tex
), il signale tous les
+répertoires qu'il examine. Pour éliminer toutes ces lignes parasites, il faut
+ajouter 2>/dev/null
à la fin de la ligne de commande
+(/dev/null
est une sorte de poubelle où on redirige les données
+dont on veut se débarasser). Par exemple :
+
+grep coucou **/* 2>/dev/null +grep coucou **/* 2>/dev/null | less ++ +
+Allez faire les exercices sur grep et les +expressions régulières . +
+ +find
+find répertoire fichier
sert à
+retrouver un fichier selon certaines caractéristiques (nom, taille...).
+L'option -name
sert à indiquer le nom du fichier recherché :
+
+find répertoire -name nom-du-fichier
+
+Le répertoire est ~
(tilde) quand on veut chercher dans tout son
+compte, .
(point) quand on veut chercher dans le répertoire
+courant (et ses sous-répertoires).
+
egypte.tex
(qui se
+trouve dans un répertoire geo/
) :
+
+corvette ~ $ find ~ -name egypte.tex /users/97/litt/toto/geo/egypte.tex
+
+~toto/histoire/moderne/documents/
il y a un fichier
+appelé chrono
et Toto se trouve dans
+histoire/
:
+
+corvette $ find . -name chrono ./moderne/documents/chrono
+
++Si vous ne vous rappelez que d'une partie du nom du fichier, +on utilise les jokers (voir le cours du Hublot sur +Les jokers, +numéro 2, décembre 1999). Reprenons le cas 1; Toto sait juste +qu'il y a «gypt» dans le nom du fichier; il fera ainsi sa demande : +
+ +
+corvette ~ $ find ~ -name '*gypt*' /users/97/litt/toto/geo/egypte.tex
+
+
+
+« *gypt*
» peut se comprendre comme « n'importe quoi avant
+et après la suite de caractères « gypt ». Les quotes
+(apostrophes) servent à garantir que les étoiles seront interprétées par
+find
, et non par le shell.
+
+Find est une +commande très puissante, qui permet de chercher un fichier non +seulement en fonction de son nom, mais aussi de son type, de sa date de +modification, de sa taille... Pour toutes ces options, voir les +exercices sur find. +
+ + + + +