<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link REL="STYLESHEET" TYPE="text/css" TITLE="Style DILIB" HREF="../../dilib.css">
<title>Corrigé du TP SED - UNIX</title>
</head>
<body>
<h1>Corrigé du TP SED - UNIX</h1>
<h2><a name="simple"></a>
Utilisation simple
</h2>
<h3>Énoncé</h3>
<p>
Écrivez une commande sed transformant la chaîne
<span class="chaine">moins</span> en
<span class="chaine">plus</span>. Appliquez-la à <code>Vous aurez
moins de budget</code>.
</p>
<h3>Solution</h3>
<pre>sed -e 's/moins/plus/g'</pre>
<h2><a name="fichier"></a>
Utilisation d'un fichier de commandes
</h2>
<h3>Énoncé</h3>
<p>
Écrivez un commande sed transformant toutes les lettres
minuscules en leur suivante lexicographique (cas
particulier : <code>z</code> se transforme en
<code>!</code>). Rappel : vous pouvez utiliser un fichier
pour rassembler plusieurs commandes sed.
</p>
<h3>Solution</h3>
<pre>sed -f decalage.sed</pre>
<pre style="font-size: smaller;"><span class="comment"># fichier "decalage.sed"</span>
s/z/!/g
s/y/z/g
s/x/y/g
s/w/x/g
s/v/w/g
s/u/v/g
s/t/u/g
s/s/t/g
s/r/s/g
s/q/r/g
s/p/q/g
s/o/p/g
s/n/o/g
s/m/n/g
s/l/m/g
s/k/l/g
s/j/k/g
s/i/j/g
s/h/i/g
s/g/h/g
s/f/g/g
s/e/f/g
s/d/e/g
s/c/d/g
s/b/c/g
s/a/b/g</pre>
<p class="remarque">
Cette solution peut sembler étrange, car les substitutions ne se
font pas dans l'ordre alphabétique mais dans l'ordre
alphabétique inverse. C'est nécessaire car sinon tous les
<code>a</code> se transforment en <code>b</code>, puis tous les
<code>b</code> (y compris ceux qui sont nouvellement
transformés) en <code>c</code>, etc., pour finir par un texte
intégralement composé de lettres <code>a</code>.
</p>
<h2><a name="passwd"></a>
Substitution en début de ligne
</h2>
<h3>Énoncé</h3>
<p>
Écrivez une commande sed qui affiche uniquement le début de
chaque ligne du fichier <code>/etc/passwd</code> jusqu'au
premier caractère <code>:</code>.
</p>
<h3>Solution</h3>
<pre>sed -e 's/^\([^:]*\).*$/\1/' /etc/passwd</pre>
<p class="remarque">
On aurait pu aussi utiliser la commande <code>cut</code>.
</p>
<h2><a name="guillemets"></a>
Substitution dans toute la ligne
</h2>
<h3>Énoncé</h3>
<p>
Écrivez une commande sed qui remplace les couples de guillemets
anglais par un couple de guillemets français (<code>Ceci est un
"exemple" qui doit "fonctionner".</code> doit donner <code>Ceci
est un <<exemple>> qui doit
<<fonctionner>>.</code>).
</p>
<h3>Solution</h3>
<pre>sed -e 's/"\([^"]*\)"/<<\1>>/g'</pre>
<hr>
<address><a href="mailto:philippe.houdry@inist.fr">Philippe.Houdry@inist.fr</a></address>
</body>
</html>