tuteurs.ens.fr/unix/exercices/solutions/less-sol.tml
2009-09-27 15:43:57 +02:00

240 lines
7.5 KiB
XML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>less</title>
</head>
<body>
<h1>Corrigé des exercices sur <code>less</code></h1>
<p>
On aborde ici <code>less</code>, qui est une version plus élaborée de
<code>more</code>; ce dernier est toujours détaillé dans dans les ouvrages sur
Unix, et de fait il est toujours présent sur ces systèmes, ce qui n'est pas
forcément vrai pour <code>less</code> (qui est quand même très courant).
<code>more</code> est beaucoup plus rudimentaire, alors que <code>less</code>
a beaucoup de fonctionnalités appréciables : vidéo inverse pour les
motifs recherchés, déplacements en avant et en arrière pour la recherche, etc.
</p>
<ol>
<li><a name="less1"><strong> Comment fait-on pour obtenir une page d'aide avec
<code>less</code> ? </strong></a>
<p>On tape <code>h</code> ou <code>H</code> pour afficher une page d'aide. On s'y
déplace comme dans <code>less</code> (flèches, <code>^D</code>,
<code>^F</code>, <code>^B</code>, <code>^P</code>, <code>SPC</code>,
<code>j</code>, <code>k</code>...). Pour quitter l'aide, ce sont les mêmes
commandes que pour quitter <code>less</code> : <code>q</code>,
<code>Q</code>, <code>:q</code>, <code>:Q</code>, <code>ZZ</code>.
</p></li>
<li> <a name="less2"><strong> Comment examiner plusieurs fichiers à la
suite ? Comment passe-t-on au suivant ? Comment revient-on au
précédent ? </strong></a>
<p>
Il suffit de donner plusieurs fichiers en argument à la commande
<code>less</code>; par exemple, pour examiner sucessivement les fichiers
<code>toto</code>, <code>bla</code> et <code>blu</code>, on tape :
</p>
<pre>
less toto bla blu
</pre>
<p>
Pour passer au fichier suivant, on tape <code>:n</code> (<em>next</em>); pour
revenir au fichier précédent, on tape <code>:p</code> (<em>previous</em>).
<code>:x</code> permet de revenir au premier fichier spécifié.
</p></li>
<li><a name="less3"><strong> Quelles sont les commandes différentes qui
permettent de quitter <code>less</code> ? </strong></a>
<p>
Ce sont : <code>q</code>, <code>Q</code>, <code>:q</code>, <code>:Q</code>,
<code>ZZ</code>.
</p></li>
<li><a name="less4"><strong> Comment dire à <code>less</code> d'ouvrir le
fichier en plaçant en haut de l'écran la ligne <em>n</em> ?
</strong></a>
<p>
On spécifie le numéro de la ligne après le signe <code>+</code>; par exemple,
pour ouvrir le fichier <code>rapport</code> sur la ligne 57, on tape :
</p>
<pre>
less +57 rapport
</pre>
</li>
<li><a name="less5"><strong> Comment dire à <code>less</code> d'ouvrir le
fichier en plaçant en haut de l'écran la première ligne où apparaît un motif
donné ? </strong></a>
<p>
On utilise l'option <code>-p</code> de la commande <code>less</code>; par
exemple, pour chercher le mot «toto» dans le fichier <code>rapport</code>, on
tape :
</p>
<pre>
less -p toto rapport
</pre>
<p>
On peut aussi indiquer le motif recherché de la façon suivante :
</p>
<pre>
less +/toto rapport
</pre>
</li>
<li><a name="less6"><strong> Quelles sont les deux commandes de
<code>less</code> qui permettent de chercher un motif dans un fichier,
respectivement après et avant la position courante ? </strong></a>
<p>
Pour chercher un motif plus en avant dans le texte, on utilise le slash (barre
oblique vers la droite : <code>/</code>). Par exemple :
</p>
<pre>
/mot
</pre>
<p>
Pour chercher en arrière de la position courante, on utilise le point
d'interrogation. Pour aller à la prochaine occurence du mot, il suffit de
taper <code>n</code> (<em>next</em>). Pour aller à la précédente occurence du
mot, il faut taper <code>N</code>. Évidemment, quand on cherche un motif avec
<code>?</code>, <code>n</code> remonte dans le texte et <code>N</code>
descend dans le texte.</p>
<p>
Une fois le début ou la fin du fichier atteint, la recherche s'arrête. On
peut utiliser les expressions régulières.
</p></li>
<li><a name="less7"><strong> Comment dire à <code>less</code> de chercher le
mot à partir de la première ligne du fichier, et ce où que l'on soit dans le
fichier ? </strong></a> <p>
Il faut taper <code>^F</code> après avoir tapé <code>/</code>. En fait,
<code>^F</code> fait commencer la recherche au premier fichier dont on a donné
le nom; quand il n'y en a qu'un seul, cela place de fait tout au début du
fichier. Par exemple, pour chercher <code>toto</code> alors qu'on se trouve à
la fin du fichier, on tape : </p>
<pre>
/^F
</pre>
<p class="continue">
Le prompt devient alors :
</p>
<pre>
First-file /
</pre>
<p class="continue">
et il n'y a plus qu'à taper le motif recherché.
</p></li>
<li><a name="less8"><strong> Que se passe-t-il si l'on cherche le motif
suivant : «toTo» en donnant l'option <code>-i</code> à
<code>less</code> ? Quelle option faut-il mettre à la place de
<code>-i</code> pour chercher <code>toTo</code> tout en ignorant la casse des
caractères ? </strong> </a>
<p>
L'option <code>-i</code> signifie <em>ignorecase</em>, c'est-à-dire ignorer la
casse des caractères (différence entre majuscules et minuscules). Si donc
je tape (au choix) :
</p>
<pre>
less -ip TOTO rapport
less -ip toto rapport
less -i +/toto rapport
less -i +/TOTO rapport
</pre>
<p>
<code>less</code> ne fera pas la différence entre les majuscules et les
minuscules, et je trouverai <code>toto</code> comme <code>TOTO</code>. Bien
sûr, c'est la même chose si je lance <code>less</code> avec l'option
<code>-i</code> et que je cherche ensuite le mot à l'intérieur du fichier avec
<code>/</code> ou <code>?</code>.
</p>
<p>
<strong>Mais</strong> l'option <code>-i</code> est invalidée si le motif
recherché contient des majuscules <em>et</em> des minuscules : si, en
lançant <code>less</code> comme ci-dessus, je cherche le motif
<code>Toto</code>, je ne trouverai que <code>Toto</code> et pas
<code>TOTO</code> par exemple. Pour contourner cette restriction, il faut
lancer <code>less</code> avec l'option <code>-I</code>, qui est donc un
<em>ignorecase</em> «robuste».
</p></li>
<li><a name="less9"><strong> Quelles sont les commandes qui permettent d'aller
à la prochaine (resp. précédente) occurence du motif recherché à travers
tous les fichiers édités ? </strong></a>
<p>
Pour aller à l'occurence suivante (resp. précédente) d'un motif dans un
fichier, on utilise <code>n</code> (resp. <code>N</code>). Pour faire la même
opération mais sans passer manuellement de fichier en fichier, on tape
<code>ESC n</code> pour chercher en avant, et <code>ESC N</code> pour chercher
en arrière. <code>ESC</code> désigne bien sûr la touche d'échappement
(<code>Escape</code>).
</p></li>
<li><a name="less10"><strong>Comment chercher dans un fichier le caractère
<code>/</code> ?</strong></a> <p>
Le caractère <code>/</code> sert à chercher un mot dans le fichier. Si on tape
</p>
<pre>
//
</pre>
<p>
<code>less</code> répond : <code>Pattern not found</code>. Il faut donc
dire à <code>less</code> de considérer le <code>/</code> comme un caractère
ordinaire, et pas comme un caractère spécial. Comme avec toutes les
expressions régulières, c'est le backslash (barre oblique vers la
gauche : <code>\</code>) qui sert à cela. Pour chercher un
<code>/</code>, on tape donc :
</p>
<pre>
/\/
</pre>
<p>La page de man donne une liste de caractères qui sont spéciaux avec
<code>/</code> et <code>?</code>. Ces commandes de recherche utilisent les
expressions régulières de <code>ed</code> (et de <code>vi</code> par
conséquent).
</p></li>
</ol>
<div class="metainformation">
Auteur : Émilia Robin, Joël Riou. Dernière modification le <date value="$Date: 2007-07-17 10:03:37 $"/>.
</div>
</body>
</html>