Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:systeme:sed [08/02/2011 11:12] smolski |
doc:systeme:sed [26/09/2013 10:02] smolski [sed] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== SED ====== | + | ====== sed ====== |
- | ''sed'' signifie //Stream EDitor//, autrement dit //éditeur de flux// et plus précisément //éditeur de flux orienté ligne//. | + | * Objet : ''sed'' signifie //Stream EDitor//, autrement dit //éditeur de flux// et plus précisément //éditeur de flux orienté ligne//. |
+ | * Niveau requis : TOUS | ||
+ | * Commentaires : // sed est un outil éditeur en ligne. // | ||
+ | * Débutant, à savoir : | ||
+ | * [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
+ | * [[:doc:programmation:shell:repertoires | Shell - Les répertoires et chemins]] **INDISPENSABLE** | ||
+ | * [[:doc:programmation:shell:regexp | REGEXP - Les expressions régulières dans un shell.]] | ||
+ | * [[:doc:programmation:bash | Le shell BASH]] En complément. | ||
===== Présentation ===== | ===== Présentation ===== | ||
''sed'' est souvent défini comme un éditeur de texte en ligne non-interactif. | ''sed'' est souvent défini comme un éditeur de texte en ligne non-interactif. | ||
- | - Il lit les lignes d'un fichier une à une (ou provenant de l'entrée standard), sans traiter nécessairement tout le texte du fichier en cours (comme le font [[commande:editeur:vim]] ou [[commande:editeur:nano]] par exemple) ; | + | - Il lit les lignes d'un fichier une à une (ou provenant de l'entrée standard), sans traiter nécessairement tout le texte du fichier en cours (comme le font [[:doc:editeurs:vim:vim]] ou [[:doc:editeurs:nano]] par exemple) ; |
- leur applique un certain nombre de commandes d'édition ; | - leur applique un certain nombre de commandes d'édition ; | ||
- et renvoie les lignes résultantes sur la sortie standard, __sans modification__ du fichier traité. | - et renvoie les lignes résultantes sur la sortie standard, __sans modification__ du fichier traité. | ||
Ligne 28: | Ligne 35: | ||
^Option ^ Commentaires | | ^Option ^ Commentaires | | ||
|-n |Écrit seulement les lignes spécifiées (associé à l'option /p) sur la sortie standard | | |-n |Écrit seulement les lignes spécifiées (associé à l'option /p) sur la sortie standard | | ||
- | |-e |Permet de spécifier les commandes à appliquer sur le fichier (des [[regexp]]). | | + | |-e |Ajoute une commande à la liste des commandes que doit exécuter **sed** sur le fichier. | |
|-f |Les commandes sont lues à partir d'un fichier préalablement rédigé. | | |-f |Les commandes sont lues à partir d'un fichier préalablement rédigé. | | ||
- | |-i |Le fichier est réellement traité par la commande sed. //À noter qu'il peut être utiliser avec //**l'option -e**// mais fonctionne pareillement sans.// | | + | |-i |Le fichier est édité sur place. Sinon, __//le fichier n'est pas édité//__, une copie de son contenu est éditée et renvoyée sur la sortie standard. | |
|s/ (//Substitution//) |Commande de substitution (remplace les caractères définis par l'ensemble de la commande sed). | | |s/ (//Substitution//) |Commande de substitution (remplace les caractères définis par l'ensemble de la commande sed). | | ||
|/g (//Global//) |Traite toutes les occurences définie (par défaut : seule la première occurence définie est traitée). | | |/g (//Global//) |Traite toutes les occurences définie (par défaut : seule la première occurence définie est traitée). | | ||
Ligne 64: | Ligne 71: | ||
==== Option -i ==== | ==== Option -i ==== | ||
- | <note important>ATTENTION ! L'option -i __modifiera réellement__ les fichiers traités.</note> | + | **ATTENTION !** L'option -i __modifiera réellement__ les fichiers traités. |
L'option ''-i'' est la fonction d'écriture de SED. Si elle n'est pas spécifiée, le fichier traité ne sera pas modifié. | L'option ''-i'' est la fonction d'écriture de SED. Si elle n'est pas spécifiée, le fichier traité ne sera pas modifié. | ||
Ligne 103: | Ligne 111: | ||
<note>L'option ''-e'' n'est pas nécessaire quand vous n'avez qu'une seule fonction d'édition.</note> | <note>L'option ''-e'' n'est pas nécessaire quand vous n'avez qu'une seule fonction d'édition.</note> | ||
+ | |||
+ | === Astuce === | ||
+ | |||
+ | En cas de confusion avec un chemin, genre ''/machin/truc/chouette '' __après l'option __ les séparateurs ''/ '' peuvent être remplacés par des caractères neutres, comme la virgule ou le dièse. Par exemple avec le chemin précédent : | ||
+ | sed -e 's#/machin/truc/chouette#/machin/truc/wouap#' | ||
+ | |||
+ | Evitant ainsi des confusions dans l'interprétation de la commande. | ||
+ | |||
+ | //Merci à //**enicar**// sur le chan df !// | ||
==== Option -f ==== | ==== Option -f ==== | ||
Ligne 224: | Ligne 241: | ||
La fonction de substitution peut aussi être utilisée avec une **expression régulière**. \\ | La fonction de substitution peut aussi être utilisée avec une **expression régulière**. \\ | ||
- | Voir : [[regexp]] | + | Voir : [[:doc:programmation:shell:regexp]] |
=== Exemples : === | === Exemples : === | ||
Ligne 232: | Ligne 249: | ||
substitue toutes les chaînes //Fraises// ou //fraises// par ''FRAISES'' | substitue toutes les chaînes //Fraises// ou //fraises// par ''FRAISES'' | ||
+ | |||
---- | ---- | ||
\\ | \\ | ||
Ligne 241: | Ligne 259: | ||
#TOTo et TITI sont des chipoteurs du jardin.</code> | #TOTo et TITI sont des chipoteurs du jardin.</code> | ||
Ainsi, nous avons commenté l'ensemble des lignes du fichier test1.txt. | Ainsi, nous avons commenté l'ensemble des lignes du fichier test1.txt. | ||
+ | |||
---- | ---- | ||
\\ | \\ | ||
Ligne 251: | Ligne 270: | ||
</code> | </code> | ||
Ainsi, nous avons commenté uniquement la 3ème ligne du fichier //test1.txt//. | Ainsi, nous avons commenté uniquement la 3ème ligne du fichier //test1.txt//. | ||
+ | |||
---- | ---- | ||
\\ | \\ | ||
+ | <code bash> | ||
+ | $ sed -e "/cerises/s/^/#/" test1.txt</code> | ||
+ | <code>toto et titi aiment les abricots. | ||
+ | toto préfère les Fraises. | ||
+ | #titi les cerises. | ||
+ | TOTo et TITI sont des chipoteurs du jardin. | ||
+ | </code> | ||
+ | Ainsi, nous avons commenté uniquement la ligne du fichier //test1.txt// contenant le motif : **cerises**. | ||
==== La fonction de suppression d ==== | ==== La fonction de suppression d ==== | ||
Ligne 289: | Ligne 317: | ||
//Voir option **n** précédente.// | //Voir option **n** précédente.// | ||
- | === La commande l === | + | === La commande l (la lettre L en minuscule) === |
La commande "''l''" (list) affiche la ligne sélectionnée sur la sortie standard avec en plus les caractères de contrôles en clair avec leur code ASCII (deux chiffres en octal). | La commande "''l''" (list) affiche la ligne sélectionnée sur la sortie standard avec en plus les caractères de contrôles en clair avec leur code ASCII (deux chiffres en octal). | ||
Ligne 437: | Ligne 465: | ||
de notre fichier. test1.txt | de notre fichier. test1.txt | ||
+ | |||
+ | <note>Pour rendre effective cette commande programmée, écrivez : '' -i '' ainsi : | ||
+ | <code bash> | ||
+ | $ sed -i -f test3.txt test1.txt</code></note> | ||
==== sed et les sous-chaînes ==== | ==== sed et les sous-chaînes ==== | ||
Ligne 442: | Ligne 474: | ||
La commande: | La commande: | ||
- | sed -e "s/\ ([0-9][0-9]*\ )/aa\ 1aa/" <fichier> | + | sed -e "s/\([0-9][0-9]*\)/aa\1aa/" <fichier> |
- | La sous-expression (sous-chaîne) \ ([0-9][0-9]*\) désigne un ou plusieurs chiffres, chacun sera entouré des caractères aa. \\ | + | La sous-expression (sous-chaîne) \([0-9][0-9]*\) désigne un ou plusieurs chiffres, chacun sera entouré des caractères aa. \\ |
La chaîne : | La chaîne : | ||
to2to | to2to | ||
Ligne 450: | Ligne 482: | ||
toaa2aato. | toaa2aato. | ||
+ | ==== sed et le point ==== | ||
+ | |||
+ | La commande: | ||
+ | |||
+ | sed -e 's/motif: .*/motif: nouveau/' <fichier> | ||
+ | |||
+ | Remplacera **motif:** par **motif: nouveau** dans le <fichier> | ||
+ | |||
+ | //Merci à //**cthulu**// Hop !// LOL | ||
===== Lien : ===== | ===== Lien : ===== | ||