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