2002-11-16 22:27:41 +01:00
|
|
|
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
|
|
|
<!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>
|
|
|
|
|
|
2002-11-16 23:49:13 +01:00
|
|
|
|
<h2><a name="grep">Chercher des mots<74>: <code>grep <em>mot fichiers</em></code></a></h2>
|
2002-11-16 22:27:41 +01:00
|
|
|
|
|
|
|
|
|
<h3>Syntaxe</h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
<strong><code>grep</code> <em> mot fichiers</em></strong> sert <20> retrouver
|
|
|
|
|
une cha<68>ne de caract<63>res dans des fichiers (<code>zgrep</code>, beaucoup moins
|
|
|
|
|
standard, s'utilise avec les fichiers compress<73>s). Nous n'entrerons pas dans
|
|
|
|
|
les d<>tails de la syntaxe. Il suffit de savoir que<75>:
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<table>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>*.tex</code></td>
|
|
|
|
|
<td>(<28>toile point tex)</td>
|
|
|
|
|
<td>signifie <20><>n'importe quel fichier <code>.tex</code><3E><>
|
|
|
|
|
(<code>*.tex</code> signifie <20><>tout ce qui ne commence pas par un point et
|
|
|
|
|
qui finit par <code>.tex</code><3E><>).</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td><code>**/</code></td>
|
|
|
|
|
<td>(<28>toile <20>toile)</td>
|
|
|
|
|
<td>d<>signe le r<>pertoire courant et tous ses sous-r<>pertoires.</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Donc<EFBFBD>:
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<table class="tableau">
|
|
|
|
|
<tr>
|
|
|
|
|
<th> Pour chercher <20>coucou<6F> dans </th>
|
|
|
|
|
<th> On tape </th>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td> Tous les fichiers <code>.tex</code> du r<>pertoire o<> l'on se trouve </td>
|
|
|
|
|
<td> <code>grep coucou *.tex</code> </td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td> Tous les fichiers du r<>pertoire o<> l'on se trouve </td>
|
|
|
|
|
<td> <code>grep coucou *</code> </td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td> Tous les fichiers <code>.tex</code> du r<>pertoire courant et de ses
|
|
|
|
|
sous-r<>pertoires </td>
|
|
|
|
|
<td> <code>grep coucou **/*.tex</code> </td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td> Tous les fichiers du r<>pertoire courant et de ses sous-r<>pertoires </td>
|
|
|
|
|
<td> <code>grep coucou **/*</code> </td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Par exemple, Toto cherche le mot <20>travail<69> dans tous les fichiers
|
|
|
|
|
<code>.tex </code> du r<>pertoire o<> il se trouve<76>:
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">corvette ~ $</span> grep travail *.tex
|
|
|
|
|
caire.tex:les voit presque tous les matins, travailler par <20>quipes de deux ou
|
|
|
|
|
jordanie.tex:m<>ridionale, le socle ancien appara<72>t. Le travail de l'<27>rosion dans les
|
|
|
|
|
jordanie.tex:Le pays compte <20>galement sur les remises des travailleurs expatri<72>s qui, au
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Quand plusieurs fichiers sont parcourus, <code>grep</code> indique dans quel
|
|
|
|
|
fichier se trouve le mot demand<6E> (mot au sens de <20>cha<68>ne de caract<63>res<65>).
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h3>Options de <code>grep</code></h3>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Il y a diff<66>rentes options <20> <code>grep</code>, dont<6E>:
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
|
<li> <code>grep -n</code><3E>: indique le <em> num<75>ro</em> de la ligne o<>
|
|
|
|
|
figure le mot.
|
|
|
|
|
</li>
|
|
|
|
|
<li> <code>grep -C</code> (<em> contexte</em>)<29>: fait figurer les deux
|
|
|
|
|
lignes qui pr<70>c<EFBFBD>dent et suivent la ligne o<> figure le mot recherch<63>.
|
|
|
|
|
</li>
|
|
|
|
|
<li> <code>grep -i</code> (<em>ignore case</em>)<29>: fait ignorer la
|
|
|
|
|
casse des caract<63>res (diff<66>rence entre majuscules et minuscules).
|
|
|
|
|
</li>
|
|
|
|
|
<li> <code>grep -c</code> (<em>count</em>)<29>: indique le nombre de lignes
|
|
|
|
|
o<EFBFBD> figure au moins une fois le mot recherch<63> dans chacun des fichiers pass<73>s
|
|
|
|
|
en revue.
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Bien entendu, ces options sont compatibles entre elles<65>:
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">corvette ~ $</span> grep -nc travail caire.tex
|
|
|
|
|
caire.tex-371-soci<63>t<EFBFBD>. On compte environ 40\,000 de ces <20>boueurs chiffonniers qui
|
|
|
|
|
caire.tex-372-vivent dans de mis<69>rables bidonvilles aux abords de la capitale. On
|
|
|
|
|
caire.tex:373:les voit presque tous les matins, travailler par <20>quipes de deux ou
|
|
|
|
|
caire.tex-374-trois hommes, habill<6C>s comme des <20>pouvantails, avec des chapeaux de
|
|
|
|
|
caire.tex-375-paille et de vieux v<>tements h<>t<EFBFBD>roclites; accompagn<67>s de leurs
|
|
|
|
|
<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>
|
|
|
|
|
<strong>D<>filement</strong><3E>: il peut arriver que le mot recherch<63> figure
|
|
|
|
|
tr<EFBFBD>s souvent, et qu'une s<>rie de lignes se mettent <20> d<>filer sur l'<27>cran,
|
|
|
|
|
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>
|
|
|
|
|
Le <code>|</code> (<em> pipe</em> en anglais<69>: tuyau) connecte la sortie
|
|
|
|
|
standard d'une commande (c'est-<2D>-dire le r<>sultat visible de cette
|
|
|
|
|
commmande) sur l'entr<74>e standard d'une autre commande (ici
|
|
|
|
|
<code>less</code>); dans notre cas, cela signifie que les lignes produites
|
|
|
|
|
par <code>grep</code> pourront <20>tre lues avec <code>less</code>, comme un
|
|
|
|
|
fichier.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
<strong>Lignes parasites</strong><3E>: <code>grep</code> passe en revue tous
|
|
|
|
|
les r<>pertoires et fichiers; quand on ne lui pr<70>cise pas la nature du fichier
|
|
|
|
|
(<code>*</code> et non pas <code>*.tex</code>), il signale tous les
|
|
|
|
|
r<EFBFBD>pertoires qu'il examine. Pour <20>liminer toutes ces lignes parasites, il faut
|
|
|
|
|
ajouter <code>2>/dev/null</code> <20> la fin de la ligne de commande
|
|
|
|
|
(<code>/dev/null</code> est une sorte de poubelle o<> on redirige les donn<6E>es
|
|
|
|
|
dont on veut se d<>barasser). Par exemple<6C>:
|
|
|
|
|
</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
|
|
|
|
|
expressions r<>guli<6C>res </a></em>.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h2><a name="find">Trouver un fichier<65>: <code>find</code></a></h2>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
<strong><code>find <em>r<>pertoire fichier</em></code></strong> sert <20>
|
|
|
|
|
retrouver un fichier selon certaines caract<63>ristiques (nom, taille...).
|
|
|
|
|
L'option <code>-name</code> sert <20> indiquer le nom du fichier recherch<63><68>:
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
<code>find <em>r<>pertoire</em> -name <em> nom-du-fichier</em></code>
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
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).
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h4>Exemples<65>:</h4>
|
|
|
|
|
|
|
|
|
|
<ol>
|
|
|
|
|
<li> Supposons que Toto cherche un fichier <code>egypte.tex</code> (qui se
|
|
|
|
|
trouve dans un r<>pertoire <code>geo/</code>)<29>:
|
|
|
|
|
<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
|
|
|
|
|
appel<EFBFBD> <code>chrono</code> et Toto se trouve dans
|
|
|
|
|
<code>histoire/</code><3E>:
|
|
|
|
|
<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
|
|
|
|
|
<a href="&url.tuteurs;docs/hublot/hublot02/hublot2.html#usage">Les jokers</a>,
|
|
|
|
|
num<EFBFBD>ro<EFBFBD>2, d<>cembre 1999). Reprenons le cas<61>1; Toto sait juste
|
|
|
|
|
qu'il y a <20>gypt<70> dans le nom du fichier; il fera ainsi sa demande<64>:
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
<span class="prompt">corvette ~ $</span> find ~ -name '*gypt*' /users/97/litt/toto/geo/egypte.tex
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
<EFBFBD><EFBFBD><code>*gypt*</code><3E><> peut se comprendre comme <20><>n'importe quoi avant
|
|
|
|
|
et apr<70>s la suite de caract<63>res <20><>gypt<70><74>. Les <em>quotes</em>
|
|
|
|
|
(apostrophes) servent <20> garantir que les <20>toiles seront interpr<70>t<EFBFBD>es par
|
|
|
|
|
<code>find</code>, et non par le <a href="&url.jargon;#shell">shell</a>.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
<strong>Find est une
|
|
|
|
|
commande tr<74>s puissante</strong>, 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
|
|
|
|
|
<a href="exercices/find.html">exercices sur find</a>.
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<div class="metainformation">
|
|
|
|
|
Auteur<EFBFBD>: <20>milia Robin. Derni<6E>re modification le 2002-11-16.
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|