{"id":142,"date":"2017-10-16T22:25:41","date_gmt":"2017-10-16T22:25:41","guid":{"rendered":"http:\/\/www.technologue.net\/?p=142"},"modified":"2017-10-16T22:25:41","modified_gmt":"2017-10-16T22:25:41","slug":"aide-memoire-commandes-sed","status":"publish","type":"post","link":"http:\/\/www.technologue.net\/?p=142","title":{"rendered":"Aide-m\u00e9moire: commandes SED"},"content":{"rendered":"<p><em>sed<\/em> est un \u00e9diteur de texte con\u00e7u pour automatiser les op\u00e9rations d&rsquo;\u00e9dition des fichiers de texte. Il est principalement utilis\u00e9 dans des scripts et, par cons\u00e9quent, il est surtout utilis\u00e9 par les programmeurs. Il ne faudrait donc pas se surprendre qu&rsquo;il ne soit ni interactif ni convivial. Les scripts SED sont tr\u00e8s performants mais ils deviennent rapidement difficiles \u00e0 lire. S&rsquo;ils deviennent trop complexes, il faudrait penser \u00e0 utiliser un autre outil (AWK, Python, etc). N\u00e9anmoins, on le retrouve partout. Parce qu&rsquo;il est fiable et efficace, il est utilis\u00e9 partout o\u00f9 les besoins d&rsquo;\u00e9dition de texte sont simples mais d\u00e9passent les capacit\u00e9s de <em>bash<\/em>. Il est install\u00e9, par d\u00e9faut, par chacune des distributions.<\/p>\n<p><em>sed<\/em> est souvent utilis\u00e9 avec 1 ou 2 redirections. Si besoin est, vous pouvez rafraichir vos connaissance <a href=\"http:\/\/www.technologue.net\/?p=102\">ici<\/a>.<\/p>\n<h3><strong>Ligne de commande<\/strong><\/h3>\n<p>Parce qu&rsquo;il n&rsquo;est pas interactif, les commandes d&rsquo;\u00e9dition sont sp\u00e9cifi\u00e9es sur la ligne de commande ou dans un fichier. Les formes g\u00e9n\u00e9rales de la commande sont:<\/p>\n<ul>\n<li>sed\u00a0 [options] commande fichierTexte<\/li>\n<li>sed\u00a0 [options] -f fichierCommandes fichierTexte<\/li>\n<\/ul>\n<p>o\u00f9 commande est une commande d&rsquo;\u00e9dition (g\u00e9n\u00e9ralement d\u00e9limit\u00e9e par des apostrophes ou guillemets).\u00a0 S&rsquo;il y a plus d&rsquo;une commande d&rsquo;\u00e9dition, on utilise -e pour chacune des commandes suppl\u00e9mentaires. Le fichier d&rsquo;entr\u00e9e est le second param\u00e8tre ou une redirection d&rsquo;entr\u00e9e. La sortie est le canal 2 (stdout) ou une redirection.<\/p>\n<p>Les options peuvent \u00eatre:<\/p>\n<pre>-e : utiliser un -e pour chaque commande suppl\u00e9mentaire\r\n-f : fichier de commandes-i : envoyer le r\u00e9sultat dans le fichier d'entr\u00e9e<\/pre>\n<p>Trois exemples ind\u00e9pendants:<\/p>\n<pre>sed '2d' fichierTexte # effacer la 2\u00ec\u00e8me ligne du texte\r\nmonProg | sed '2d' &gt; fichierSortie\r\nsed -f fichierCommandes fichierTexte &gt; fichierSortie<\/pre>\n<h3><strong>Syntaxe d&rsquo;une commande<\/strong><\/h3>\n<p>condition-de-s\u00e9lection\u00a0 [!] op\u00e9ration [arguments]<\/p>\n<p>o\u00f9 condition-de-s\u00e9lection peut \u00eatre:<\/p>\n<table>\n<tbody>\n<tr>\n<td><\/td>\n<td>la commande s&rsquo;applique \u00e0 toutes les lignes<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">n<\/td>\n<td>la commande s&rsquo;applique \u00e0 la ligne n seulement.<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">n,m<\/td>\n<td>la commande s&rsquo;applique aux lignes n \u00e0 m (inclusivement). Ce type de s\u00e9lection n&rsquo;est pas possibles pour les commandes a, i, r, q et =<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\/exprReg\/<\/td>\n<td>la commande s&rsquo;applique \u00e0 chacune des lignes o\u00f9 l&rsquo;expression r\u00e9guli\u00e8re est vraie<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\/expr1\/, \/expr2\/<\/td>\n<td>la commande s&rsquo;applique \u00e0 chacune des lignes des blocs d\u00e9butant par expr1 et se terminant par expr2<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>$ peut \u00eatre utilis\u00e9 pour sp\u00e9cifier la derni\u00e8re ligne.<\/p>\n<p>si la condition\u00a0 est suivie d&rsquo;un !, alors la commande ne s&rsquo;appliquera qu&rsquo;aux lignes o\u00f9 la condition-de-s\u00e9lection est fausse.<\/p>\n<p>et l&rsquo;op\u00e9ration (et ses arguments) peut \u00eatre:<\/p>\n<table>\n<tbody>\n<tr>\n<th>cmd<\/th>\n<th>description<\/th>\n<th>options<\/th>\n<th>exemples<\/th>\n<\/tr>\n<tr>\n<td>a<\/td>\n<td>ins\u00e9rer ligne vide sous le curseur<\/td>\n<td><\/td>\n<td>1a<\/td>\n<\/tr>\n<tr>\n<td>d<\/td>\n<td>\u00e9liminer la ligne du curseur<\/td>\n<td><\/td>\n<td>1d<\/td>\n<\/tr>\n<tr>\n<td>i<\/td>\n<td>ins\u00e9rer ligne vide au-dessus du curseur<\/td>\n<td><\/td>\n<td>1,3i<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">s<\/td>\n<td valign=\"top\">remplacer<\/td>\n<td>g: r\u00e9p\u00e9ter<br \/>\nn: ni\u00e8me fois<\/td>\n<td valign=\"top\">s\/A\/B\/<br \/>\ns\/A\/B\/g<br \/>\ns\/A\/B\/2<\/td>\n<\/tr>\n<tr>\n<td>y\/\/\/<\/td>\n<td>conversion de caract\u00e8res (un pour un)<\/td>\n<td><\/td>\n<td>y\/ab\/AB\/<\/td>\n<\/tr>\n<tr>\n<td>=<\/td>\n<td>afficher num\u00e9ro de la ligne<\/td>\n<td><\/td>\n<td>\/proc\/=<\/td>\n<\/tr>\n<tr>\n<td>{ &#8230;<br \/>\n&#8230; }<\/td>\n<td>grouper plusieurs commandes<\/td>\n<td><\/td>\n<td>1,3{s\/A\/B\/<br \/>\ns\/C\/D\/}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Exemple<\/h3>\n<p>Vous d\u00e9cidez de combiner deux sites WEB pour n&rsquo;en faire qu&rsquo;un seul. Le 1er site utilisait &lt;H2&gt; pour les titres de pages alors que le second utilisait &lt;H3&gt;. Pour uniformiser,\u00a0 vous voulez convertir \u00e0 &lt;H3&gt; tous les &lt;H2&gt; de toutes les pages du 1er site.<\/p>\n<pre>for F in *htm\r\ndo\r\n  sed -i -e 's\/&lt;H2\/&lt;H3\/g' $F\r\ndone<\/pre>\n<p>\u00c9videmment, cet exemple ignore le fait qu&rsquo;il y a aussi des <em>&lt;\/H<\/em> qui doivent \u00eatre convertis. L&rsquo;oblique \u00e9tant utilis\u00e9e comme s\u00e9parateur par d\u00e9faut par la commande s, il faudra donc complexifier un peu:<\/p>\n<pre>for F in *htm\r\ndo\r\n  sed -i -e 's\/&lt;\\\/H2\/&lt;\\\/H3\/g' $F\r\ndone<\/pre>\n<p>Le symbole \\ indique \u00e0 <em>sed<\/em> que le prochain caract\u00e8re perd sa signification particuli\u00e8re. Une telle syntaxe peut devenir difficile \u00e0 lire et il est plus simple de demander \u00e0 <em>sed<\/em> de changer son d\u00e9limiteur (le 1er caract\u00e8re qui suit la commande s devient le d\u00e9limiteur).<\/p>\n<pre>for F in *htm\r\ndo\r\n  sed -i -e 's|&lt;\/H2|&lt;\/H3|g' $F\r\ndone<\/pre>\n<p>La solution finale, avec un peu d&#8217;embellissement,\u00a0 devient:<\/p>\n<pre>for F in *htm; do\r\n  sed -i \\\r\n    -e 's|&lt;H2|&lt;H3|g' \\\r\n\u00a0   -e 's|&lt;\/H2|&lt;\/H3|g' \\\r\n\u00a0   -e 's|&lt;h2|&lt;h3|g' \\\r\n    -e 's|&lt;\/h2|&lt;\/h3|g' \\\r\n    $F\r\ndone<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>sed est un \u00e9diteur de texte con\u00e7u pour automatiser les op\u00e9rations d&rsquo;\u00e9dition des fichiers de texte. Il est principalement utilis\u00e9 dans des scripts et, par cons\u00e9quent, il est surtout utilis\u00e9 par les programmeurs. Il ne faudrait donc pas se surprendre qu&rsquo;il ne soit ni interactif ni convivial. Les scripts SED sont tr\u00e8s performants mais ils &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.technologue.net\/?p=142\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Aide-m\u00e9moire: commandes SED&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts\/142"}],"collection":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=142"}],"version-history":[{"count":1,"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts\/142\/revisions"}],"predecessor-version":[{"id":146,"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts\/142\/revisions\/146"}],"wp:attachment":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=142"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}