[CLI Wiki] page changée : filtres:sed

noreply at asyd.net noreply at asyd.net
Fri Oct 27 11:26:25 CEST 2006


Une page dans votre Wiki a été ajoutée ou modifiée. Voici les 
détails :

Date              : 2006/10/27 11:26
Navigateur        : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.0.7) Gecko/20060921 Ubuntu/dapper-security Firefox/1.5.0.7
Adresse IP        : 81.57.110.136
Nom d'hôte        : mon75-2-81-57-110-136.fbx.proxad.net
Ancienne révision : http://cli.asyd.net/home/filtres/sed?rev=1161856696
Nouvelle révision : http://cli.asyd.net/home/filtres/sed
Résumé            : Ajout de la liste des commandes
Utilisateur       : danielcaillibaud

@@ -8,6 +8,78 @@
  ^ Suprimer les lignes 10,14, et 16 à 20 d'un fichier | sed '10d;14d;16,20d;' <fichier> > <fichier.nouveau> |
  ^ Supprimer les lignes commençant par ; | sed '/%%^%%;/d' <fichier> > <fichier.nouveau> |
  ^ Afficher uniquement les lignes 10 à 15 d'un fichier | sed -n '10,15p' <fichier> > <fichier.nouveau> |
  ^ Afficher uniquement les lignes paires | sed '1~2d' < <fichier> |
+ 
+ ===== généralités =====
+   * sed -e expression  : applique l'expression au flux d'entrée
+   * sed -ne expression : idem, mais n'affiche rien en sortie, sauf si on le précise avec p
+   * sed -i suf -e expression fichier : applique l'expression au fichier (pas besoin de préciser entrée sortie) avec backup de l'ancienne version du fichier en fichier.suf (mettre une chaîne vide à la place de suf pour ne pas avoir de backup)
+ 
+ expression est en général de la forme
+   * n commande : applique la commande à la ligne n
+   * n,m commande : : applique la commande aux lignes de n à m
+   * /pattern/ commande : applique la commande aux lignes qui vérifient le pattern
+   * /pattern/,/pattern2/ commande : applique la commande aux lignes qui se trouvent entre une ligne qui vérifie pattern et une autre qui vérifie pattern2
+ 
+ ===== Commandes =====
+   * = : affiche le n° de la ligne
+   * a : ajoute des lignes, par exemple :
+ 
+   sed -e '/pattern/a\
+   ajout d'une ligne\
+   et d'une autre.' < fichier_src > fichier_dest
+ 
+   * c : change des lignes complètes, ex (vire le corps des fonctions, blocs compris entre accolades ouvrantes/fermantes qui débutent une ligne et remplace par "[... corps de la fonction ...]"
+ 
+   sed -e '/^{/,/^}/c\
+   [... corps de la fonction ...]' < fichier.c > resume
+ 
+   * d : efface la ligne (rmq, "!d" est souvent utilisé pour sélectionner des lignes à garder) et retourne au début du script ou de l'expression avec la ligne suivante du fichier d'entrée.
+   * i : insère avant la ligne.
+   * l : idem p avec les caractères de contrôle
+   * n : passe à la ligne suivante (sans appliquer les commandes suivantes à la ligne courante) et y applique la commande suivante.
+   * s/motif/remplacement/opt
+   * p : affiche la ligne
+   * y/car_src/car_dest/ : substitue des caractères par d'autres
+   * N : ajoute la ligne au patternspace
+ 
+ ==== cas du rechercher/remplacer ====
+ 
+ s/search/replace/opt où opt peut être
+   * rien : la 1re occurence est remplacée
+   * g : toutes les occurences sont remplacées
+   * N : seule la Nième occurence est remplacée
+   * p : affiche la ligne si subtitution
+   * w fichier : envoie le résultat de la substitution dans un fichier
+   * I : insensible à la casse (extension GNU)
+ 
+ Caractères particulier pour le remplacement :
+   * \i ième référence arrière
+   * & chaine complète qui correspond au pattern
+ 
+ ===== Pour aller plus loin =====
+ Dès que la liste des commandes excède 2 ou 3 instructions, il est plus simple de faire un script à part. Ex:
+   * plutôt que ''sed -e 'exp1; exp2;exp3;exp4;' <fichier'' créer un script.sed avec
+ <code sed>
+ #!/bin/sed -f
+ exp1
+ # un peu de commentaires ça fait pas de mal
+ exp2
+ exp3
+ exp4
+ </code>
+ que l'on appelle avec ''script.sed fichier''
+   * et pour utiliser le -n comme avec ''sed -ne 'exp1; exp2;exp3;exp4;' <fichier'' remplace le shebang par ''#! /bin/sed -nf''
+ 
+ Il est aussi possible d'utiliser le "holdspace" (un buffer secondaire).
+   * P affiche la première ligne du pattern space.
+   * x échange les contenus du pattern space et du hold space.
+   * g remplace le contenu du pattern space par celui du hold space.
+   * G ajoute un caractère nouvelle ligne et le contenu du hold space au pattern space.
+   * h remplace le contenu du hold space par celui du pattern space.
+   * H ajoute un caractère nouvelle ligne et le contenu du pattern space au hold space.
+   * N ajoute un caractère nouvelle ligne et une nouvelle ligne de données au pattern space (s'il n'y a plus de données à lire, l'emploi de cette commande cause la fin du programme). 
+ 
+ Plus d'infos sur http://okki666.free.fr/docmaster/articles/linux130.html 
  
  ~~DISCUSSION~~



-- 
Ce message a été généré par DokuWiki
http://cli.asyd.net/home/



More information about the Shell mailing list