logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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 → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 [26/09/2013 10:02]
smolski [sed]
doc:systeme:sed [21/07/2014 10:10]
smolski [Préparation aux exemples d'illustration de ce tuto :]
Ligne 1: Ligne 1:
 ====== sed ====== ====== sed ======
  
-  * Objet : ''​sed'' ​signifie //Stream EDitor//, autrement dit //éditeur de flux// et plus précisément //éditeur de flux orienté ligne//. +  * Objet : sed 
-  * Niveau requis : TOUS +  * Niveau requis : {{tag>​débutant}} 
-  * Commentaires : // sed est un outil éditeur en ligne. // +  * Commentaires : **sed** ​signifie //Stream EDitor//, autrement dit //éditeur de flux// et plus précisément //éditeur de flux orienté ligne//. 
-  * Débutant, à savoir :  +  * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) 
-     ​* ​[[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) +  Suivi  
-     ​[[:doc:​programmation:​shell:​repertoires | Shell Les répertoires et chemins]] **INDISPENSABLE*+    * Création par smolski 24-04-2010 
-     ​* [[:doc:​programmation:​shell:​regexp | REGEXP ​Les expressions régulières dans un shell.]] +    ​Testé par smolski le 08-10-2013 
-     ​[[:doc:​programmation:​bash | Le shell BASH]] En complément.+  Commentaires sur le forum : [[http://debian-facile.org/​viewtopic.php?​id=2508 | Lien vers le forum concernant ce tuto]]((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) 
 + 
 +**Nota :** 
 + 
 +Contributeurs,​ les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
  
 ===== Présentation ===== ===== Présentation =====
Ligne 20: Ligne 24:
  
 La commande ''​sed''​ est une commande très riche, ne vous sont présentées ici que les fonctions les plus courantes, pour plus de détails faites un : La commande ''​sed''​ est une commande très riche, ne vous sont présentées ici que les fonctions les plus courantes, pour plus de détails faites un :
- +<code user>man sed</​code>​
-   ​$ ​man sed+
  
  
Ligne 57: Ligne 60:
 Pour réaliser les exemples qui suivront sur votre pc, en session user, rédigez un fichier test1.txt ainsi : Pour réaliser les exemples qui suivront sur votre pc, en session user, rédigez un fichier test1.txt ainsi :
  
-<​code ​bash+<​code ​user fichier_test1.txt
-cat >> ~/test1.txt <<EOF</​code>​ +cat >> ~/test1.txt <<EOF
-<​code>​+
 toto et titi aiment les abricots. toto et titi aiment les abricots.
 toto préfère les Fraises. toto préfère les Fraises.
Ligne 67: Ligne 69:
 </​code>​ </​code>​
  
-Voir : la commande ​[[cat]]+Voir : [[doc:​systeme:​cat | la commande ​cat]]
  
 ==== Option -i ==== ==== Option -i ====
Ligne 89: Ligne 91:
  
 **Exemple :** **Exemple :**
-<​code ​bash+ 
-sed -e "​s/​[Tt][Oo]/​ton/​g"​ test1.txt</​code>​+La commande : 
 +<​code ​user
 +sed -e "​s/​[Tt][Oo]/​ton/​g"​ test1.txt</​code>​ 
 + 
 +Donne :
 <​code>​tonton et titi aiment les abricots. <​code>​tonton et titi aiment les abricots.
 tonton préfère les Fraises. tonton préfère les Fraises.
Ligne 100: Ligne 106:
    "​s/​[Tt][Oo]/​ton/​g"​    "​s/​[Tt][Oo]/​ton/​g"​
  
-est la ''​commande sed''​ //​substituant//​ (''​**s**/''​) les chaînes de caractère ​:+est la ''​commande sed''​ //​substituant//​ (''​**s**/''​) les chaînes de caraCool, non ?​ctère ​:
    TOTO    TOTO
    TOTo    TOTo
Ligne 127: Ligne 133:
 **Syntaxe :** \\ **Syntaxe :** \\
    sed -f <​fichier_programme>​ <​fichier_a_traiter>​    sed -f <​fichier_programme>​ <​fichier_a_traiter>​
 +
 +<note tip>Pour que les fichiers traités le soit réellement pensez à utiliser l'​option ''​-i''​. Sinon, rien ne sera réalisé réellement.</​note>​
  
 === Exemple : === === Exemple : ===
  
 Créer un fichier représentant l'​écriture de la commande ''​sed''​ à envoyer : Créer un fichier représentant l'​écriture de la commande ''​sed''​ à envoyer :
-<​code ​bash+<​code ​user fichier_test2.txt
-cat >> ~/test2.txt <<EOF</​code>​ +cat >> ~/test2.txt <<EOF
-<​code>​+
 s/​[Tt][Oo]/​ton/​g s/​[Tt][Oo]/​ton/​g
 s/​[Tt][Ii]/​ti/​g s/​[Tt][Ii]/​ti/​g
Ligne 141: Ligne 148:
  
 Application de la commande ''​sed''​ avec l'​option ''​-f''​ invitant à appliquer la commande rédigée dans le fichier //​test2.txt//​ : Application de la commande ''​sed''​ avec l'​option ''​-f''​ invitant à appliquer la commande rédigée dans le fichier //​test2.txt//​ :
-<​code ​bash+<​code ​user
-sed -f test2.txt test1.txt </​code>​+sed -f test2.txt test1.txt </​code>​ 
 + 
 +Donne :
 <​code>​tonton et titi aiment les abricots. <​code>​tonton et titi aiment les abricots.
 tonton préfère les fraises. tonton préfère les fraises.
Ligne 159: Ligne 168:
  
 **Exemple :** **Exemple :**
-<​code ​bash+<​code ​user
-sed -n s/​Fraises/​fraises/​ test1.txt </​code>​+sed -n s/​Fraises/​fraises/​ test1.txt </​code>​ 
 Bien que traité, rien n'​apparait. Bien que traité, rien n'​apparait.
  
 Avec la fonction p : Avec la fonction p :
-<​code ​bash+<​code ​user
-sed -n s/​Fraises/​fraises/​p test1.txt </​code>​+sed -n s/​Fraises/​fraises/​p test1.txt </​code>​ 
 + 
 +Donne :
 <​code>​ <​code>​
 toto préfère les fraises. toto préfère les fraises.
 </​code>​ </​code>​
 +
 Seule la ligne traitée est affichée. :-) Seule la ligne traitée est affichée. :-)
  
Ligne 177: Ligne 190:
 **Syntaxe :** **Syntaxe :**
    sed <​option>​ "s/ <​fichier_programme>"​ <​fichier_a_traiter>​    sed <​option>​ "s/ <​fichier_programme>"​ <​fichier_a_traiter>​
 +
 +<note tip>Pour que les fichiers traités le soit réellement pensez à utiliser l'​option ''​-i''​. Sinon, rien ne sera réalisé réellement.</​note>​
  
 === Exemples : === === Exemples : ===
  
-<​code ​bash+<​code ​user
-sed -e "​s/​toto/​TOTO/"​ test1.txt</​code>​+sed -e "​s/​toto/​TOTO/"​ test1.txt</​code>​
  
 va changer la première occurence de la chaîne //toto// par //TOTO// (__uniquement__ la première chaîne //toto// rencontrée dans le texte), et affichera ceci : va changer la première occurence de la chaîne //toto// par //TOTO// (__uniquement__ la première chaîne //toto// rencontrée dans le texte), et affichera ceci :
Ligne 192: Ligne 207:
 ---- ----
 \\ \\
-<​code ​bash+<​code ​user
-sed "s/toto/TOTO/2" test1.txt</​code>​+sed "2s/​toto/​TOTO/"​ test1.txt</​code>​
  
 va changer la __seconde__ occurence de la chaîne //toto// par **TOTO** (__uniquement__ la seconde chaîne //toto// rencontrée dans le texte) va changer la __seconde__ occurence de la chaîne //toto// par **TOTO** (__uniquement__ la seconde chaîne //toto// rencontrée dans le texte)
Ligne 204: Ligne 219:
 ---- ----
 \\ \\
-<​code ​bash+<​code ​user
-sed "​s/​toto/​TOTO/​g"​ test1.txt</​code>​+sed "​s/​toto/​TOTO/​g"​ test1.txt</​code>​
 ''​g = global''​ \\ ''​g = global''​ \\
 ''​g''​ va changer __toutes les occurences__ de la chaîne //toto// par //TOTO// (toutes les chaînes //toto// rencontrées seront changées) ''​g''​ va changer __toutes les occurences__ de la chaîne //toto// par //TOTO// (toutes les chaînes //toto// rencontrées seront changées)
Ligne 212: Ligne 227:
 \\ \\
  
-<code bash> +Nous pouvons également choisir de ne changer qu'une occurence en la situant dans le texte. \\ 
-sed "​s/​toto/​TOTO/​p"​ test1.txt</​code>​+Dans le fichier exemple ci-dessous : 
 +<file bash texte_exemple>​toto et titi sont sur un bato</​file>​ 
 + 
 +La commande : 
 +<​code ​user> 
 +sed -e "​s/​to/​teau/​3"​ texte_exemple</​code>​ 
 + 
 +n'​agira que sur la //​troisième occurence// "​to"​ et affichera la rectification : 
 +<​file ​bash texte_exemple>​toto et titi sont sur un bateau</​file>​ 
 + 
 +//Cool, non ?// 8-) 
 + 
 +---- 
 +\\ 
 +<code user
 +sed "​s/​toto/​TOTO/​p"​ test1.txt</​code>​
  
 en cas de remplacement la ligne concernée est affichée sur la sortie standard (uniquement en cas de substitution) en cas de remplacement la ligne concernée est affichée sur la sortie standard (uniquement en cas de substitution)
Ligne 220: Ligne 250:
 \\ \\
  
-<​code ​bash+<​code ​user
-sed "​s/​toto/​TOTO/​w resultat"​ test1.txt</​code>​+sed "​s/​toto/​TOTO/​w resultat"​ test1.txt</​code>​ 
 en cas de substitution la ligne en entrée est inscrite dans un fichier ''​résultat''​ en cas de substitution la ligne en entrée est inscrite dans un fichier ''​résultat''​
-<​code ​bash+<​code ​user
-sed "​s/​toto/​TOTO/​w resultat1.txt"​ test1.txt</​code>​+sed "​s/​toto/​TOTO/​w resultat1.txt"​ test1.txt</​code>​ 
 + 
 +Donne :
 <​code>​TOTO et titi aiment les abricots. <​code>​TOTO et titi aiment les abricots.
 TOTO préfère les Fraises. TOTO préfère les Fraises.
Ligne 230: Ligne 263:
 TOTo et TITI sont des chipoteurs du jardin. TOTo et TITI sont des chipoteurs du jardin.
 </​code>​ </​code>​
 +
 Lecture du fichier résultat1.txt créé : Lecture du fichier résultat1.txt créé :
-<​code ​bash+<​code ​user
-less resultat1.txt</​code>​+less resultat1.txt</​code>​ 
 + 
 +Donne :
 <​code>​ <​code>​
 TOTO et titi aiment les abricots. TOTO et titi aiment les abricots.
Ligne 242: Ligne 278:
 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 : [[:​doc:​programmation:​shell:​regexp]] Voir : [[:​doc:​programmation:​shell:​regexp]]
 +
 +<note tip>Pour que les fichiers traités le soit réellement pensez à utiliser l'​option ''​-i''​. Sinon, rien ne sera réalisé réellement.</​note>​
  
 === Exemples : === === Exemples : ===
  
-<​code ​bash+<​code ​user
-sed -e "​s/​[Ff]raises/​FRAISES/​g"​ test1.txt</​code>​+sed -e "​s/​[Ff]raises/​FRAISES/​g"​ test1.txt</​code>​
  
 substitue toutes les chaînes //Fraises// ou //fraises// par ''​FRAISES''​ substitue toutes les chaînes //Fraises// ou //fraises// par ''​FRAISES''​
Ligne 252: Ligne 290:
 ---- ----
 \\ \\
-<​code ​bash+<​code ​user
-sed -e "​s/​^/#/"​ test1.txt </​code>​+sed -e "​s/​^/#/"​ test1.txt </​code>​ 
 + 
 +Donne :
 <​code>#​toto et titi aiment les abricots. <​code>#​toto et titi aiment les abricots.
 #toto préfère les Fraises. #toto préfère les Fraises.
 #titi les cerises. #titi les cerises.
 #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.
  
 ---- ----
 \\ \\
-<​code ​bash+<​code ​user
-sed -e "​3s/​^/#/"​ test1.txt</​code>​+sed -e "​3s/​^/#/"​ test1.txt</​code>​ 
 + 
 +Donne :
 <​code>​toto et titi aiment les abricots. <​code>​toto et titi aiment les abricots.
 toto préfère les Fraises. toto préfère les Fraises.
Ligne 273: Ligne 316:
 ---- ----
 \\ \\
-<​code ​bash+<​code ​user
-sed -e "/​cerises/​s/​^/#/"​ test1.txt</​code>​+sed -e "/​cerises/​s/​^/#/"​ test1.txt</​code>​ 
 + 
 +Donne :
 <​code>​toto et titi aiment les abricots. <​code>​toto et titi aiment les abricots.
 toto préfère les Fraises. toto préfère les Fraises.
Ligne 280: Ligne 325:
 TOTo et TITI sont des chipoteurs du jardin. TOTo et TITI sont des chipoteurs du jardin.
 </​code>​ </​code>​
 +
 Ainsi, nous avons commenté uniquement la ligne du fichier //​test1.txt//​ contenant le motif : **cerises**. Ainsi, nous avons commenté uniquement la ligne du fichier //​test1.txt//​ contenant le motif : **cerises**.
  
Ligne 288: Ligne 334:
 **Syntaxe :** \\ **Syntaxe :** \\
    sed <​fichier_programme>​d <​fichier_a_traiter>​    sed <​fichier_programme>​d <​fichier_a_traiter>​
 +
 +<note tip>Pour que les fichiers traités le soit réellement pensez à utiliser l'​option ''​-i''​. Sinon, rien ne sera réalisé réellement.</​note>​
  
 **Exemple :** **Exemple :**
-<​code ​bash+<​code ​user
-sed "​2,​4d"​ test1.txt</​code>​+sed "​2,​4d"​ test1.txt</​code>​ 
 Cette commande va supprimer les lignes ''​2 à 4''​ du <​fichier>​. Cette commande va supprimer les lignes ''​2 à 4''​ du <​fichier>​.
  
Ligne 298: Ligne 347:
  
 On peut utiliser les expressions régulières:​ On peut utiliser les expressions régulières:​
-<​code ​bash+<​code ​user
-sed "/​toto/​d"​ test1.txt</​code>​+sed "/​toto/​d"​ test1.txt</​code>​
  
 Cette commande __supprime les lignes__ contenant la chaîne ''​toto''​. Cette commande __supprime les lignes__ contenant la chaîne ''​toto''​.
Ligne 307: Ligne 356:
  
 Si, à l'​inverse,​ __on ne veut pas effacer__ les lignes contenant la chaîne toto (toutes les autres sont supprimées),​ on tapera: Si, à l'​inverse,​ __on ne veut pas effacer__ les lignes contenant la chaîne toto (toutes les autres sont supprimées),​ on tapera:
-<​code ​bash+<​code ​user
-sed "/​toto/​!d"​ test1.txt</​code>​+sed "/​toto/​!d"​ test1.txt</​code>​
  
 ==== Les fonctions p, l, et = ==== ==== Les fonctions p, l, et = ====
Ligne 320: Ligne 369:
  
 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).
-<​code ​bash+<​code ​user
-sed l test1.txt</​code>​+sed l test1.txt</​code>​ 
 + 
 +Donne :
 <​code>​ <​code>​
 toto et titi aiment les abricots.$ toto et titi aiment les abricots.$
Ligne 332: Ligne 383:
  
 La commande "''​=''"​ donne le numéro de la ligne sélectionnée sur la sortie standard. La commande "''​=''"​ donne le numéro de la ligne sélectionnée sur la sortie standard.
-<​code ​bash+<​code ​user
-sed = test1.txt</​code>​+sed = test1.txt</​code>​ 
 + 
 +Donne :
 <​code>​ <​code>​
 1 1
Ligne 344: Ligne 397:
 TOTo et TITI sont des chipoteurs du jardin.</​code>​ TOTo et TITI sont des chipoteurs du jardin.</​code>​
  
-<​code ​bash+<​code ​user
-sed "/​toto/​="​ test1.txt</​code>​+sed "/​toto/​="​ test1.txt</​code>​ 
 + 
 +Donne :
 Cette commande va afficher le numéro des lignes contenant la chaîne ''​toto''​ ainsi : Cette commande va afficher le numéro des lignes contenant la chaîne ''​toto''​ ainsi :
 <​code>​ <​code>​
Ligne 364: Ligne 419:
  
 La fonction "''​q''"​ (quit) va interrompre l'​exécution de **sed**, la ligne en cours de traitement est affichée sur la sortie standard (uniquement si l'​option "''​-n''"​ n'a pas été utilisée). La fonction "''​q''"​ (quit) va interrompre l'​exécution de **sed**, la ligne en cours de traitement est affichée sur la sortie standard (uniquement si l'​option "''​-n''"​ n'a pas été utilisée).
-<​code ​bash+<​code ​user
-~$ sed "/​cerises/​q"​ test1.txt </​code>​+sed "/​cerises/​q"​ test1.txt </​code>​ 
 + 
 +Donne :
 <​code>​ <​code>​
 toto et titi aiment les abricots. toto et titi aiment les abricots.
Ligne 375: Ligne 432:
  
 La fonction "''​r''"​ (read) lit le contenu d'un fichier et écrit le contenu sur la sortie standard. La fonction "''​r''"​ (read) lit le contenu d'un fichier et écrit le contenu sur la sortie standard.
-<​code ​bash+<​code ​user
-sed r test1.txt </​code>​+sed r test1.txt </​code>​ 
 + 
 +Donne :
 <​code>​ <​code>​
 toto et titi aiment les abricots. toto et titi aiment les abricots.
Ligne 388: Ligne 447:
 La fonction "''​w''"​ (write) écrit la ligne sélectionnée dans un fichier. \\ La fonction "''​w''"​ (write) écrit la ligne sélectionnée dans un fichier. \\
 Par exemple : Par exemple :
-<​code ​bash+<​code ​user
-sed "/​^toto/​w resultat2.txt"​ test1.txt</​code>​+sed "/​^toto/​w resultat2.txt"​ test1.txt</​code>​ 
 Cette commande va écrire dans le fichier ''​resultat2.txt''​ toutes les lignes du fichier //​test1.txt//​ commençant par la chaîne //toto//. Cette commande va écrire dans le fichier ''​resultat2.txt''​ toutes les lignes du fichier //​test1.txt//​ commençant par la chaîne //toto//.
  
Ligne 402: Ligne 462:
  
 **Exemple :** \\ **Exemple :** \\
-<​code ​bash+<​code ​user
-sed 1i\ Début test1.txt</​code>​+sed 1i\ Début test1.txt</​code>​ 
 + 
 +Donne
 <​code>​Début <​code>​Début
 toto et titi aiment les abricots. toto et titi aiment les abricots.
Ligne 419: Ligne 481:
  
 **Exemple :** \\ **Exemple :** \\
-<​code ​bash+<​code ​user
-sed 4a\ Fin test1.txt</​code>​+sed 4a\ Fin test1.txt</​code>​ 
 + 
 +Donne :
 <​code>​ <​code>​
 toto et titi aiment les abricots. toto et titi aiment les abricots.
Ligne 426: Ligne 490:
 titi les cerises. titi les cerises.
 TOTo et TITI sont des chipoteurs du jardin. TOTo et TITI sont des chipoteurs du jardin.
-Fin +Fin</​code>​
-</​code>​+
  
 Vous pouvez appeler la fonction ''​i''​ ou ''​a''​ dans un fichier de commande sed. Vous pouvez appeler la fonction ''​i''​ ou ''​a''​ dans un fichier de commande sed.
Ligne 434: Ligne 497:
 Soit un fichier //​prog.sed//​ rédigé ainsi : Soit un fichier //​prog.sed//​ rédigé ainsi :
  
-<​code ​bash+<​code ​user
-cat >> ~/test3.txt <<EOF</​code>​ +cat >> ~/test3.txt <<EOF
-<​code>​+
 1i\\  1i\\ 
 début du traitement début du traitement
Ligne 447: Ligne 509:
  
 On exécute la commande en tapant : On exécute la commande en tapant :
-<​code ​bash+<​code ​user
-sed -f test3.txt test1.txt</​code>​+sed -f test3.txt test1.txt</​code>​ 
 + 
 +Résultat :
 <​code>​ <​code>​
 début du traitement début du traitement
Ligne 467: Ligne 531:
  
 <​note>​Pour rendre effective cette commande programmée,​ écrivez : ''​ -i ''​ ainsi : <​note>​Pour rendre effective cette commande programmée,​ écrivez : ''​ -i ''​ ainsi :
-<​code ​bash> +<​code ​user>sed -i -f test3.txt test1.txt</​code></​note>​
-sed -i -f test3.txt test1.txt</​code></​note>​+
  
 ==== sed et les sous-chaînes ==== ==== sed et les sous-chaînes ====
  
 La commande: La commande:
- 
    sed -e "​s/​\([0-9][0-9]*\)/​aa\1aa/"​ <​fichier>​    sed -e "​s/​\([0-9][0-9]*\)/​aa\1aa/"​ <​fichier>​
  
Ligne 485: Ligne 547:
  
 La commande: La commande:
- 
    sed -e '​s/​motif:​ .*/motif: nouveau/'​ <​fichier>​    sed -e '​s/​motif:​ .*/motif: nouveau/'​ <​fichier>​
  
Ligne 491: Ligne 552:
  
 //Merci à //​**cthulu**//​ Hop !// LOL //Merci à //​**cthulu**//​ Hop !// LOL
 +
 ===== Lien : ===== ===== Lien : =====
  
doc/systeme/sed.txt · Dernière modification: 30/09/2023 22:14 par captnfab

Pied de page des forums

Propulsé par FluxBB