Newer
Older
cours-unix-shell / UnixShell_cours2018 / corrigeSed.fre.html
<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&eacute; du TP SED - UNIX</title>
  </head>

  <body>
    <h1>Corrig&eacute; du TP SED - UNIX</h1>

    <h2><a name="simple"></a>
      Utilisation simple
    </h2>
    <h3>&Eacute;nonc&eacute;</h3>
    <p>
      &Eacute;crivez une commande sed transformant la cha&icirc;ne
      <span class="chaine">moins</span> en 
      <span class="chaine">plus</span>. Appliquez-la &agrave; <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>&Eacute;nonc&eacute;</h3>
    <p>
      &Eacute;crivez un commande sed transformant toutes les lettres
      minuscules en leur suivante lexicographique (cas
      particulier&nbsp;: <code>z</code> se transforme en
      <code>!</code>). Rappel&nbsp;: 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 &eacute;trange, car les substitutions ne se
      font pas dans l'ordre alphab&eacute;tique mais dans l'ordre
      alphab&eacute;tique inverse. C'est n&eacute;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&eacute;s) en <code>c</code>, etc., pour finir par un texte
      int&eacute;gralement compos&eacute; de lettres <code>a</code>.
    </p>

    <h2><a name="passwd"></a>
      Substitution en d&eacute;but de ligne
    </h2>
    <h3>&Eacute;nonc&eacute;</h3>
    <p>
      &Eacute;crivez une commande sed qui affiche uniquement le d&eacute;but de
      chaque ligne du fichier <code>/etc/passwd</code> jusqu'au
      premier caract&egrave;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>&Eacute;nonc&eacute;</h3>
    <p>
      &Eacute;crivez une commande sed qui remplace les couples de guillemets
      anglais par un couple de guillemets fran&ccedil;ais (<code>Ceci est un
      "exemple" qui doit "fonctionner".</code> doit donner <code>Ceci
      est un &lt;&lt;exemple&gt;&gt; qui doit
      &lt;&lt;fonctionner&gt;&gt;.</code>).
    </p>
    <h3>Solution</h3>
    <pre>sed -e 's/"\([^"]*\)"/&lt;&lt;\1&gt;&gt;/g'</pre>
 

    <hr>
    <address><a href="mailto:philippe.houdry@inist.fr">Philippe.Houdry@inist.fr</a></address>
  </body>
</html>