<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>