<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"> <style type="text/css"> .chaine { background-color: #B0E0FF; color: green; } .chaine:before { content: "«"; } .chaine:after { content: "»"; } .attention { font-style: italic; } .remarque, .exemple, .remarque_suite { font-size: small; } .remarque { margin-bottom: 2; } .remarque_suite { margin-bottom: 2; margin-top: 0; } .remarque:before { content: "REMARQUE :"; } .exemple:before { content: "Exemple : "; } .attention:before { content: "ATTENTION :"; } .solution { display: none; } </style> <script type="text/javascript"> /* nom du fichier contenant le corrigé équivalent à celui de ce fichier */ var corrige='corrigeSed.fre.html'; /* Cette fonction est à adapter aux identifiants de la page */ function cacherSolutions() { if(document.getElementById && document.styleSheets) { document.getElementById('passwd').style.display='none'; document.getElementById('guillemets').style.display='none'; document.getElementById('fichier').style.display='none'; } } </script> <script type="text/javascript" src="cacher.js"></script> <title>TP sed - UNIX</title> <link rel="copyright" href="http://www.inist.fr/"><link rel="author" href="http://dilib.inist.fr/membres.html"><link rel="chapter" href="caracteristiques.fre.html" title="UNIX"><link rel="chapter" href="X.fre.html" title="X Window"><link rel="chapter" href="redirPipes.fre.html" title="Rappels"><link rel="chapter" href="newCommandsUser.fre.html" title="Commandes UNIX"><link rel="chapter" href="shellVars.fre.html" title="Shell"><link rel="chapter" href="sed.fre.html" title="Sed"><link rel="chapter" href="make.fre.html" title="Make"><link rel="index" href="http://dilib.inist.fr/dilib/v04Main/IndexSite/Server/FR.resource.index.html"><link rel="top" title="Accueil de DILIB" href="http://dilib.inist.fr/dilib/v04Main/"><link rel="alternate" title="English version" href="tpSed.eng.html"><link rel="up" href="index.fre.html" title="Tutorial UNIX / Shell"> <link rel="section" href="sed.fre.html" title="Sed"><link rel="section" href="tpSed.fre.html" title="Travaux Pratiques"> <link rel="first" href="caracteristiques.fre.html" title="Caractéristiques d'UNIX"> <link rel="previous" href="sed.fre.html" title="Sed"> <link rel="next" href="make.fre.html" title="Make"> <link rel="last" href="tpSed.fre.html" title="Travaux Pratiques"> </head> <body onload="cacherSolutions();"> <h1>TP sed - UNIX</h1> <div id="navcontainer"> <ul id="navlist"> <li><a href="caracteristiques.fre.html">UNIX</a> </li> <li><a href="redirPipes.fre.html">Bases</a> </li> <li><a href="newCommandsUser.fre.html">Commandes</a> </li> <li><a href="shellVars.fre.html">Shell</a> </li> <li><a>Sed</a> <ul id="subnavlist"> <li><a href="sed.fre.html">Principes</a></li> <li><a href="tpSed.fre.html" id="subcurrent">TP</a></li> </ul> </li> <li><a href="make.fre.html">Make</a> </li> </ul> </div> <div class="content"> <h2> Utilisation simple </h2> <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> <script type="text/javascript"> EcrireBouton('simple'); </script> <div class="solution" id="simple"> <a href="javascript:Cacher('simple');">Cacher la solution</a> <pre>sed -e 's/moins/plus/g'</pre> </div> <h2> Utilisation d'un fichier de commandes </h2> <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> <script type="text/javascript"> EcrireBouton('fichier'); </script> <div class="solution" id="fichier"> <a href="javascript:Cacher('fichier');">Cacher la solution</a> <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> </div> <h2> Substitution en début de ligne </h2> <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> <script type="text/javascript"> EcrireBouton('passwd'); </script> <div class="solution" id="passwd"> <a href="javascript:Cacher('passwd');">Cacher la solution</a> <pre>sed -e 's/^\([^:]*\).*$/\1/' /etc/passwd</pre> <p class="remarque"> On aurait pu aussi utiliser la commande <code>cut</code>. </p> </div> <h2> Substitution dans toute la ligne </h2> <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> <script type="text/javascript"> EcrireBouton('guillemets'); </script> <div class="solution" id="guillemets"> <a href="javascript:Cacher('guillemets');">Cacher la solution</a> <pre>sed -e 's/"\([^"]*\)"/<<\1>>/g'</pre> </div> </div> <hr> <address><a href="mailto:philippe.houdry@inist.fr">Philippe.Houdry@inist.fr</a></address> </body> </html>