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 [22/08/2012 10:44] smolski |
doc:systeme:sed [08/09/2020 07:05] smolski [Lien :] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== SED ====== | + | ====== sed ====== |
+ | |||
+ | * Objet : sed | ||
+ | * Niveau requis : {{tag>débutant avisé}} | ||
+ | * Commentaires : **sed** signifie //Stream EDitor//, autrement dit //éditeur de flux// et plus précisément //éditeur de flux orienté ligne//. | ||
+ | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
+ | * Suivi : | ||
+ | * Création par [[user>smolski]] le 24-04-2010 | ||
+ | * Testé par [[user>smolski]] le 08-10-2013 | ||
+ | * 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 !)) | ||
- | * 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 : | ||
- | * [[manuel:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
- | * [[manuel: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 18: | Ligne 21: | ||
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 53: | Ligne 55: | ||
===== Préparation aux exemples d'illustration de ce tuto : ===== | ===== Préparation aux exemples d'illustration de ce tuto : ===== | ||
- | 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, créez 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 65: | Ligne 66: | ||
</code> | </code> | ||
- | Voir : la commande [[cat]] | + | Voir : [[doc:systeme:cat | la commande cat]] |
==== 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é. | ||
**Syntaxe :** \\ | **Syntaxe :** \\ | ||
- | sed -i <programme_sed> <fichier_a_traiter> | + | sed -i <commande_sed> <fichier_à_traiter> |
Ligne 79: | Ligne 81: | ||
'' | '' | ||
-e'' permet de spécifier les commandes à appliquer sur le fichier. \\ | -e'' permet de spécifier les commandes à appliquer sur le fichier. \\ | ||
- | Cette option est utile lorque vous appliquez plusieurs commandes. | + | Cette option est utile lorsque vous appliquez plusieurs commandes. \\ |
- | Afin d'eviter que le shell interprète certains caracteres, il faut mieux encadrer la commande avec des apostrophes simples ou doubles : '' ' '' ou ''"'' . | + | Afin d'éviter que le shell interprète certains caractères, il vaut mieux encadrer la commande avec des apostrophes simples ou doubles : '' ' '' ou ''"'' . |
**Syntaxe :** \\ | **Syntaxe :** \\ | ||
- | sed -e <programme_sed> <fichier_a_traiter> | + | sed -e <commande_sed> -e <commande_sed> <fichier_à_traiter> |
**Exemple :** | **Exemple :** | ||
- | <code bash> | + | |
- | $ sed -e "s/[Tt][Oo]/ton/g" test1.txt</code> | + | La commande : |
- | <code>tonton et titi aiment les abricots. | + | <code user> |
+ | sed -e "s/[Tt][Oo]/ton/g" -e "s/abricots/myrtilles/g" test1.txt</code> | ||
+ | |||
+ | Donne : | ||
+ | <code>tonton et titi aiment les myrtilles. | ||
tonton préfère les Fraises. | tonton préfère les Fraises. | ||
titi les cerises. | titi les cerises. | ||
Ligne 107: | Ligne 113: | ||
sur la //globalité// du fichier, (//c'est à dire toutes les lignes//) ''(/**g**''). | sur la //globalité// du fichier, (//c'est à dire toutes les lignes//) ''(/**g**''). | ||
- | <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 commande à faire exécuter à sed.</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#' | ||
+ | |||
+ | Évitant ainsi des confusions dans l'interprétation de la commande. | ||
+ | |||
+ | //Merci à //**enicar**// sur le chan df !// | ||
+ | |||
+ | Dans la même idée d'interprétation confuse, voir sur le forum : | ||
+ | * https://debian-facile.org/viewtopic.php?pid=342480#p342480 | ||
==== Option -f ==== | ==== Option -f ==== | ||
- | L'option -f permet d'appliquer la rédaction d'un ''programme sed'' déjà rédigé dans un fichier (dit : <fichier_programme> dans le tuto). | + | L'option -f permet d'utiliser un fichier texte contenant les commandes que ''sed'' devra appliquer. \\ |
+ | Ce fichier est donc un script qui sera interprété par le programme ''sed'' d'où le nom utilisé dans ce tuto : <script_sed> | ||
**Syntaxe :** \\ | **Syntaxe :** \\ | ||
- | sed -f <fichier_programme> <fichier_a_traiter> | + | sed -f <script_sed> <fichier_à_traiter> |
+ | |||
+ | <note tip>Pour que les fichiers traités le soient 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 ''monScriptSed'' qui contiendra toutes les commandes que ''sed'' devra exécuter : |
- | <code bash> | + | <code user monScriptSed> |
- | $ cat >> ~/test2.txt <<EOF</code> | + | cat >> ~/monScriptSed <<EOF |
- | <code> | + | |
s/[Tt][Oo]/ton/g | s/[Tt][Oo]/ton/g | ||
s/[Tt][Ii]/ti/g | s/[Tt][Ii]/ti/g | ||
Ligne 128: | Ligne 149: | ||
</code> | </code> | ||
- | 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 les commandes contenues dans le fichier //monScriptSed// : |
- | <code bash> | + | <code user> |
- | $ sed -f test2.txt test1.txt </code> | + | sed -f monScriptSed 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 144: | Ligne 167: | ||
**Syntaxe :** \\ | **Syntaxe :** \\ | ||
- | sed -n <fichier_programme>/p <fichier_a_traiter> | + | sed -n <commande_sed>/p <fichier_à_traiter> |
**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 164: | Ligne 191: | ||
**Syntaxe :** | **Syntaxe :** | ||
- | sed <option> "s/ <fichier_programme>" <fichier_a_traiter> | + | sed <option> "s/ <commande_sed>" <fichier_à_traiter> |
+ | |||
+ | <note tip>Pour que les fichiers traités le soient 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 "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 180: | Ligne 209: | ||
---- | ---- | ||
\\ | \\ | ||
- | <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 192: | Ligne 221: | ||
---- | ---- | ||
\\ | \\ | ||
- | <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 200: | Ligne 229: | ||
\\ | \\ | ||
- | <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 208: | Ligne 252: | ||
\\ | \\ | ||
- | <code bash> | + | <code user> |
- | $ sed "s/toto/TOTO/w resultat" test1.txt</code> | + | sed "s/toto/TOTO/w résultat" 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 résultat1.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 218: | Ligne 265: | ||
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 résultat1.txt</code> |
+ | |||
+ | Donne : | ||
<code> | <code> | ||
TOTO et titi aiment les abricots. | TOTO et titi aiment les abricots. | ||
Ligne 228: | Ligne 278: | ||
==== sed et les regexp ==== | ==== sed et les regexp ==== | ||
- | 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 rationnelle**. \\ |
- | Voir : [[regexp]] | + | Voir : [[:doc:programmation:shell:regexp]] |
+ | |||
+ | <note tip>Pour que les fichiers traités le soient 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 "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'' | ||
+ | |||
---- | ---- | ||
\\ | \\ | ||
- | <code bash> | + | <code user> |
- | $ sed -e "s/^/#/" test1.txt </code> | + | sed "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 "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 256: | Ligne 315: | ||
</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> | + | <code user> |
- | $ sed -e "/cerises/s/^/#/" test1.txt</code> | + | sed "/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 265: | Ligne 327: | ||
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 272: | Ligne 335: | ||
**Syntaxe :** \\ | **Syntaxe :** \\ | ||
- | sed <fichier_programme>d <fichier_a_traiter> | + | sed <commande_sed>d <fichier_à_traiter> |
+ | |||
+ | <note tip>Pour que les fichiers traités le soient 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 283: | Ligne 349: | ||
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 292: | Ligne 358: | ||
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 305: | Ligne 371: | ||
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 317: | Ligne 385: | ||
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 329: | Ligne 398: | ||
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> |
- | Cette commande va afficher le numéro des lignes contenant la chaîne ''toto'' ainsi : | + | |
+ | Donne : | ||
+ | Cette commande va afficher le numéro de chaque ligne contenant la chaîne ''toto'' ainsi : | ||
<code> | <code> | ||
1 | 1 | ||
Ligne 342: | Ligne 413: | ||
==== Remarque ==== | ==== Remarque ==== | ||
- | <note tip>Ces trois commandes sont utiles pour le débogage, quand vous mettez au point vos programmes ''sed''.</note> | + | <note tip>Ces trois commandes sont utiles pour le débogage, quand vous mettez au point vos commandes ''sed''.</note> |
==== Les fonctions q, r et w ==== | ==== Les fonctions q, r et w ==== | ||
Ligne 349: | Ligne 420: | ||
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 360: | Ligne 433: | ||
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 373: | Ligne 448: | ||
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 387: | Ligne 463: | ||
**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 404: | 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 411: | Ligne 489: | ||
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. | ||
**Exemple :** \\ | **Exemple :** \\ | ||
- | Soit un fichier //prog.sed// rédigé ainsi : | + | Soit un fichier //monScriptSed// rédigé ainsi : |
- | <code bash> | + | <code user>cat >> ~/monScriptSed <<EOF |
- | $ cat >> ~/test3.txt <<EOF</code> | + | |
- | <code> | + | |
1i\\ | 1i\\ | ||
début du traitement | début du traitement | ||
Ligne 432: | Ligne 507: | ||
On exécute la commande en tapant : | On exécute la commande en tapant : | ||
- | <code bash> | + | <code user>sed -f monScriptSed test1.txt</code> |
- | $ sed -f test3.txt test1.txt</code> | + | |
+ | Résultat : | ||
<code> | <code> | ||
début du traitement | début du traitement | ||
Ligne 443: | Ligne 519: | ||
</code> | </code> | ||
- | la commande rédigée dans le fichier //test3.txt// a pour effet d'inscrire avant la première ligne (1i) le texte : | + | les commandes rédigées dans le fichier //monScriptSed// ont pour effet d'inscrire avant la première ligne (1i) le texte : |
début de traitement | début de traitement | ||
Ligne 450: | Ligne 526: | ||
de notre fichier. test1.txt | de notre fichier. test1.txt | ||
+ | |||
+ | <note>Pour rendre effective cette commande programmée, écrivez : '' -i '' ainsi : | ||
+ | <code user>sed -i -f monScriptSed 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 462: | Ligne 540: | ||
deviendra : | deviendra : | ||
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 : ===== | ||
+ | |||
+ | * Partage d'une petite astuce avec sed (et autres commandes à regex) : | ||
+ | * [[doc:sed-non-greedy-pattern|sed-non-greedy-pattern]] | ||
* http://www.funix.org/fr/unix/expr-sed.htm#haut | * http://www.funix.org/fr/unix/expr-sed.htm#haut | ||
* http://www.shellunix.com/sed.html | * http://www.shellunix.com/sed.html | ||
+ | |||
+ | **Voir aussi ssed aux fonctions plus étendues :** | ||
+ | * https://debian-facile.org/utilisateurs:phlinux:tutos:omegat-merge-de-la-source-avec-la-traduction | ||
+ | |||
+ | |||
===== Remerciements ===== | ===== Remerciements ===== | ||
//Tous mes remerciements à //**Malekal_morte** et **captnfab**// pour leurs sciences et patiences et à l'équipe redoutable d'//**adrien**//, //**appzer0**// et //**morphalus**// sur le salon toujours souriant du chan //**#slackware-fr**. :-D | //Tous mes remerciements à //**Malekal_morte** et **captnfab**// pour leurs sciences et patiences et à l'équipe redoutable d'//**adrien**//, //**appzer0**// et //**morphalus**// sur le salon toujours souriant du chan //**#slackware-fr**. :-D |