2009-09-20 12:34:28 +02:00
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
<!DOCTYPE html
|
|
|
|
|
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
|
|
|
|
"tuteurs://DTD/tml.dtd">
|
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>Chercher</title>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
|
|
<h1>Chercher des mots et des fichiers sous Unix</h1>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2><a name="grep">Chercher des mots : <code>grep <em>mot fichiers</em></code></a></h2>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
|
|
|
|
|
<h3>Syntaxe</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<strong><code>grep</code> <em> mot fichiers</em></strong> sert à retrouver
|
|
|
|
|
une chaîne de caractères dans des fichiers (<code>zgrep</code>, 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 :
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<table>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>*.tex</code></td>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<td>(étoile point tex)</td>
|
|
|
|
|
<td>signifie « n'importe quel fichier <code>.tex</code> »
|
|
|
|
|
(<code>*.tex</code> signifie « tout ce qui ne commence pas par un point et
|
|
|
|
|
qui finit par <code>.tex</code> »).</td>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>**/</code></td>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<td>(étoile étoile)</td>
|
|
|
|
|
<td>désigne le répertoire courant et tous ses sous-répertoires.</td>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Donc :
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<table class="tableau">
|
|
|
|
|
<tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<th> Pour chercher «coucou» dans </th>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
<th> On tape </th>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<td> Tous les fichiers <code>.tex</code> du répertoire où l'on se trouve </td>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
<td> <code>grep coucou *.tex</code> </td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<td> Tous les fichiers du répertoire où l'on se trouve </td>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
<td> <code>grep coucou *</code> </td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<td> Tous les fichiers <code>.tex</code> du répertoire courant et de ses
|
|
|
|
|
sous-répertoires </td>
|
2011-03-24 13:44:03 +01:00
|
|
|
|
<td> <code>grep -r --include="*.tex" coucou</code> </td>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<td> Tous les fichiers du répertoire courant et de ses sous-répertoires </td>
|
2011-03-24 13:41:58 +01:00
|
|
|
|
<td> <code>grep -r coucou .</code> </td>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Par exemple, Toto cherche le mot «travail» dans tous les fichiers
|
|
|
|
|
<code>.tex </code> du répertoire où il se trouve :
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">corvette ~ $</span> grep travail *.tex
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Quand plusieurs fichiers sont parcourus, <code>grep</code> indique dans quel
|
2009-09-20 12:27:14 +02:00
|
|
|
|
fichier se trouve le mot demandé (mot au sens de «chaîne de caractères»).
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Options de <code>grep</code></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Il y a différentes options à <code>grep</code>, dont :
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li> <code>grep -n</code> : indique le <em> numéro</em> de la ligne où
|
2002-11-16 22:27:41 +01:00
|
|
|
|
figure le mot.
|
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li> <code>grep -C</code> (<em> contexte</em>) : fait figurer les deux
|
|
|
|
|
lignes qui précèdent et suivent la ligne où figure le mot recherché.
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li> <code>grep -i</code> (<em>ignore case</em>) : fait ignorer la
|
|
|
|
|
casse des caractères (différence entre majuscules et minuscules).
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</li>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li> <code>grep -c</code> (<em>count</em>) : indique le nombre de lignes
|
|
|
|
|
où figure au moins une fois le mot recherché dans chacun des fichiers passés
|
2002-11-16 22:27:41 +01:00
|
|
|
|
en revue.
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Bien entendu, ces options sont compatibles entre elles :
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">corvette ~ $</span> grep -nc travail caire.tex
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2002-11-16 22:27:41 +01:00
|
|
|
|
<span class="prompt">corvette ~ $</span> grep -c travail *.tex
|
|
|
|
|
caire.tex:1
|
|
|
|
|
egypte.tex:0
|
|
|
|
|
jordanie.tex:2
|
|
|
|
|
syrie.tex:0
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<h3>Confort</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<strong>Défilement</strong> : 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,
|
2002-11-16 22:27:41 +01:00
|
|
|
|
parce qu'elle n'ont pas la place d'y figurer toutes. Dans ce cas, vous pouvez
|
|
|
|
|
taper
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>grep machin * | less</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Le <code>|</code> (<em> pipe</em> 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
|
2002-11-16 22:27:41 +01:00
|
|
|
|
<code>less</code>); dans notre cas, cela signifie que les lignes produites
|
2009-09-20 12:27:14 +02:00
|
|
|
|
par <code>grep</code> pourront être lues avec <code>less</code>, comme un
|
2002-11-16 22:27:41 +01:00
|
|
|
|
fichier.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<strong>Lignes parasites</strong> : <code>grep</code> passe en revue tous
|
|
|
|
|
les répertoires et fichiers; quand on ne lui précise pas la nature du fichier
|
2002-11-16 22:27:41 +01:00
|
|
|
|
(<code>*</code> et non pas <code>*.tex</code>), il signale tous les
|
2009-09-20 12:27:14 +02:00
|
|
|
|
répertoires qu'il examine. Pour éliminer toutes ces lignes parasites, il faut
|
|
|
|
|
ajouter <code>2>/dev/null</code> à la fin de la ligne de commande
|
|
|
|
|
(<code>/dev/null</code> est une sorte de poubelle où on redirige les données
|
|
|
|
|
dont on veut se débarasser). Par exemple :
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
grep coucou **/* 2>/dev/null
|
|
|
|
|
grep coucou **/* 2>/dev/null | less
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
<em>Allez faire les <a href="exercices/grep.html">exercices sur grep et les
|
2009-09-20 12:27:14 +02:00
|
|
|
|
expressions régulières </a></em>.
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2><a name="find">Trouver un fichier : <code>find</code></a></h2>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<strong><code>find <em>répertoire fichier</em></code></strong> sert à
|
|
|
|
|
retrouver un fichier selon certaines caractéristiques (nom, taille...).
|
|
|
|
|
L'option <code>-name</code> sert à indiquer le nom du fichier recherché :
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<code>find <em>répertoire</em> -name <em> nom-du-fichier</em></code>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Le répertoire est <code>~</code> (tilde) quand on veut chercher dans tout son
|
|
|
|
|
compte, <code> .</code> (point) quand on veut chercher dans le répertoire
|
|
|
|
|
courant (et ses sous-répertoires).
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h4>Exemples :</h4>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
|
|
|
|
|
<ol>
|
|
|
|
|
<li> Supposons que Toto cherche un fichier <code>egypte.tex</code> (qui se
|
2009-09-20 12:27:14 +02:00
|
|
|
|
trouve dans un répertoire <code>geo/</code>) :
|
2002-11-16 22:27:41 +01:00
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">corvette ~ $</span> find ~ -name egypte.tex /users/97/litt/toto/geo/egypte.tex
|
|
|
|
|
</pre>
|
|
|
|
|
</li>
|
|
|
|
|
<li> Dans <code>~toto/histoire/moderne/documents/</code> il y a un fichier
|
2009-09-20 12:27:14 +02:00
|
|
|
|
appelé <code>chrono</code> et Toto se trouve dans
|
|
|
|
|
<code>histoire/</code> :
|
2002-11-16 22:27:41 +01:00
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">corvette $</span> find . -name chrono ./moderne/documents/chrono
|
|
|
|
|
</pre>
|
|
|
|
|
</li>
|
|
|
|
|
</ol>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
<strong>Si vous ne vous rappelez que d'une partie du nom du fichier</strong>,
|
|
|
|
|
on utilise les jokers (voir le cours du <em>Hublot</em> sur
|
2002-12-12 05:42:13 +01:00
|
|
|
|
<a href="&url.tuteurs;docs/hublot/hublot02.html#usage">Les jokers</a>,
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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 :
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">corvette ~ $</span> find ~ -name '*gypt*' /users/97/litt/toto/geo/egypte.tex
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
« <code>*gypt*</code> » peut se comprendre comme « n'importe quoi avant
|
|
|
|
|
et après la suite de caractères « gypt ». Les <em>quotes</em>
|
|
|
|
|
(apostrophes) servent à garantir que les étoiles seront interprétées par
|
2002-11-16 22:27:41 +01:00
|
|
|
|
<code>find</code>, et non par le <a href="&url.jargon;#shell">shell</a>.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
<strong>Find est une
|
2009-09-20 12:27:14 +02:00
|
|
|
|
commande très puissante</strong>, qui permet de chercher un fichier non
|
2002-11-16 22:27:41 +01:00
|
|
|
|
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
|
|
|
|
|
<a href="exercices/find.html">exercices sur find</a>.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<div class="metainformation">
|
2009-09-27 22:00:55 +02:00
|
|
|
|
Auteur : Émilia Robin. <date value="from git" />
|
2002-11-16 22:27:41 +01:00
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|