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).

#1 24-04-2010 13:46:59

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

wiki - Sed Un éditeur puissant en ligne de commande

Hop ! C'est là :
http://debian-facile.org/doc:systeme:sed

Tchibâââ ! lol

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#2 24-04-2010 19:35:12

RUFUS
Membre
Inscription : 10-03-2010

Re : wiki - Sed Un éditeur puissant en ligne de commande

sed super !!!

merci popo smolski cool

Hors ligne

#3 25-04-2010 14:28:45

guilhem91
Membre
Lieu : Essonne
Distrib. : Squeeze 6.0.1
Noyau : 2.6.32-5-amd64
(G)UI : KDE 4.4.5
Inscription : 26-06-2009
Site Web

Re : wiki - Sed Un éditeur puissant en ligne de commande

Tiens, j'ai appris une commande aujourd'hui... Et utile en plus !

Merci Smolski wink

Debian Squeeze 6.0.1 64 bits sur AMD Phenom II X4 3GHz + Nvidia Geforce 9600 GT

Mon site : GNU/Linux et conseils en vrac...

Hors ligne

#4 08-07-2010 11:20:24

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - Sed Un éditeur puissant en ligne de commande

Après considération du tuto de sed, le voici agrémenté de nouvelles explications et d'exemples concrets rendant plus "facile" la compréhension et l'usage de cette commande importante.

Ça reste du niveau très avisé, mais ce serait dommage de s'en passer tout de même.

Amitié, Jojo

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#5 23-05-2013 15:55:58

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - Sed Un éditeur puissant en ligne de commande

Hop !

Un petit ajout concernant l'utilisation du point dans la commande sed :
sed et le point. C'est là !

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#6 08-10-2013 07:49:38

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - Sed Un éditeur puissant en ligne de commande

enicar a écrit :

Bonjour,

J'ai repéré l'erreur suivante dans ce tutoriel :
dans le paragraphe : « sed et les sous-chaînes » la commande sed contient des espaces superflus :

 sed -e "s/\  ([0-9][0-9]*\  )/aa\  1aa/" <fichier>


alors que l'on devrait avoir :

  sed -e "s/\([0-9][0-9]*\)/aa\1aa/" <fichier>



Merci enicar, c'est rectifié ! smile


saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#7 20-07-2014 17:22:12

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

Re : wiki - Sed Un éditeur puissant en ligne de commande

Bonjour,
excusez-moi, je ne suis pas trop sûre, mais il semble qu'il y ait une erreur.

Paragraphe substitution, au niveau du deuxième exemple :

sed "s/toto/TOTO/2" test1.txt


sur le fichier

toto et titi aiment les abricots.
toto préfère les Fraises.
titi les cerises.
TOTo et TITI sont des chipoteurs du jardin.



Ne semble pas pouvoir changer la deuxième occurrence de toto en TOTO. smile

L'adressage chiffré devant être placé devant les commandes, c'est peut-être un mauvais couper/coller qui a peut-être  remplacé cela :

sed -n "2s/toto/TOTO/p" test1.txt


TOTO préfère les Fraises.



smile

Hors ligne

#8 20-07-2014 17:31:30

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - Sed Un éditeur puissant en ligne de commande

Ok corrige le tuto Hypathie, si la ligne inscrite ne fonctionne pas. smile

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#9 20-07-2014 19:01:12

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : wiki - Sed Un éditeur puissant en ligne de commande

Non, pas d'erreur.
Le 2 signifie la 2e occurrence sur la ligne. Il n'y a pas de ligne avec deux « toto », donc pas de substitution possible.

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#10 20-07-2014 19:15:01

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - Sed Un éditeur puissant en ligne de commande

Effectivement, cependant le tuto ainsi rédigé me semble plus conforme dans l'intention à ce qu'il était avant. smile

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#11 20-07-2014 19:16:56

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : wiki - Sed Un éditeur puissant en ligne de commande

Ben, sauf que maintenant le tuto n'explique plus comment supprimer la 2e occurrence d'un terme (sur chaque ligne). Bien qu'avant il l'expliquait peut-être de manière erronée.

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#12 20-07-2014 19:37:02

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - Sed Un éditeur puissant en ligne de commande

voilà de manière érronée, y faudrait rajouter l'exemple en le mettant efficacement smile

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#13 20-07-2014 19:38:42

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : wiki - Sed Un éditeur puissant en ligne de commande

+1

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#14 21-07-2014 00:10:13

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

Re : wiki - Sed Un éditeur puissant en ligne de commande

coucou captnfab

bah en dessous de l'exemple il est écrit

va changer la seconde occurence de la chaîne toto par TOTO (uniquement la seconde chaîne toto rencontrée dans le texte)



tongue

Hors ligne

#15 21-07-2014 00:22:42

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

Re : wiki - Sed Un éditeur puissant en ligne de commande

yep smile

dans mes brouillons sur les E.R., j'ai Adressage avec n° d'occurrence.

j'peux mettre un lien si vous voulez ?

Hors ligne

#16 21-07-2014 08:06:51

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : wiki - Sed Un éditeur puissant en ligne de commande

Plop,

Tu peux aussi changer la ligne pour remplacer la 2e occurrence non pas de toto mais to smile

C'est important de voir que c'est la 2e de la ligne et non pas la 2e du texte.

Au passage, je pense qu'il vaut mieux éviter au maximum les liens vers les tutos persos, en tout cas pour les choses fondamentales.
Les tutos perso ne sont maintenus/relus que par leur propriétaire. Donc ils conviennent mieux pour des choses éphémères ou des cas d'utilisations très particuliers (et donc les liens vers eux sont à préférer dans ce contexte d'utilisation). smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#17 21-07-2014 09:11:31

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - Sed Un éditeur puissant en ligne de commande

Ajout dans la commande de substitution s l'exemple pour changer une seule occurence située dans le texte en la situant. smile

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#18 20-04-2015 17:24:09

milou
Membre
Lieu : Sur une autre planète....
Distrib. : Jessie - Stretch/Sid
Noyau : 3.16.0-4-amd64
(G)UI : Lxde
Inscription : 12-02-2015

Re : wiki - Sed Un éditeur puissant en ligne de commande

Mise en conformité de l'en-tête.
Suppression de la ligne nota Fixme

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source
Un vrai geek, c'est un mec qui croit que dans 1km, il y a 1024 mètres
Dans le doute, rebootes. Si tu te tâtes, formates.
1453651422.jpg

Hors ligne

#19 12-03-2016 13:29:35

phlinux
Membre
Distrib. : Buster
Noyau : 5.10
(G)UI : Openbox (+Rox+Feh)
Inscription : 09-05-2009

Re : wiki - Sed Un éditeur puissant en ligne de commande

Bjr,
Il existe un éditeur du même acabit qui se nomme ssed et qui fournit des options plus étendues. Puis-je mettre un lien vers un exemple de ce sed amélioré ?

Pages perso : feh, omegat, udisks, passerelle, schroot vraiment transparent

Hors ligne

#20 12-03-2016 14:35:37

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - Sed Un éditeur puissant en ligne de commande

Ah oui ! smile

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#21 12-03-2016 15:08:19

phlinux
Membre
Distrib. : Buster
Noyau : 5.10
(G)UI : Openbox (+Rox+Feh)
Inscription : 09-05-2009

Re : wiki - Sed Un éditeur puissant en ligne de commande

Voilà, mis un lien en bas de page. Peut être faudrat-il écrire une petite ligne dans le corps de la page.
Reste aussi à ce que les barbus de service vérifient que sed ne fait pas par lui même ce que phlinux demande à ssed.
Je reste à disposition pour expliciter le besoin que j'en eus.

Pages perso : feh, omegat, udisks, passerelle, schroot vraiment transparent

Hors ligne

#22 12-03-2016 17:11:02

smolski
quasi...modo
Lieu : AIN
Distrib. : backports (buster) 10
Noyau : Linux 4.19.0-8-amd64
(G)UI : gnome
Inscription : 21-10-2008

Re : wiki - Sed Un éditeur puissant en ligne de commande

je serai pour un tuto spécifique à ssed plutôt qu'un emplâtre dans sed... smile

saque eud dun (patois chtimi : fonce dedans)

Hors ligne

#23 12-03-2016 21:02:07

phlinux
Membre
Distrib. : Buster
Noyau : 5.10
(G)UI : Openbox (+Rox+Feh)
Inscription : 09-05-2009

Re : wiki - Sed Un éditeur puissant en ligne de commande

Ouais, bon on sait qu'il existe au cas où

Pages perso : feh, omegat, udisks, passerelle, schroot vraiment transparent

Hors ligne

#24 25-01-2021 14:29:35

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : wiki - Sed Un éditeur puissant en ligne de commande

Salut
j'ai mis une petite note pour préciser que l'option -e ne modifie pas le fichier mais affiche seulement sur l'entrée standard

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

En ligne

#25 25-01-2021 21:05:24

cyrille
CA Debian-Facile
Lieu : Nowhere
Distrib. : SID + FreeBSD. Stable sur serveurs.
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

Re : wiki - Sed Un éditeur puissant en ligne de commande

Bonsoir, en lisant ce how to bien fait et synthétique, je me propose de le compléter par un cas concret auquel j'ai répondu sur le forum. Par contre, je n'ai pas osé écrire directement dans la page du wiki ne sachant si c'était une pratique courante ou non. DOnc ça concerne la dernière partie relative au sous chaine. Je propose un cas concret avec de multiples sous chaines. Si ça te dit, tu peux compléter ta page avec si non tant pis wink

==============================================Exemple de parsing d'un fichier avec SED (avec des sous chaines multiples)

Imaginons un fichier html avec des entrées
- référence 1 : 6 lettres en capitales
- étagère : "ETAGERE" + 2 chiffres
- référence 2 : suite de 6 chiffres
- référence de la boite : BOX + 2 chiffres
- référence de l'unité de stockage : UNITE + 1 lettre en capitale



<html>
<body>Exemple avec SED</body>
<p>VOici un exemple</p>
<h1>Stockage BATIMENT 1</h1>
<h2>ABCDEF</h2><label class="tel" title="ETAGERE34">12345678</label><p><br>BOX06<br>UNITEA</p>
<h3>
<h2>ZERDEF</h2><label class="tel" title="ETAGERE04">88888888</label><p><br>BOX12<br>UNITER</p>
<h3>Description d'autre chose</h3>
<p>Une description et du blablabla</p>
<p><b><i>Juste pour remplir</i></b><p>
.....
<h2>UYRDEF</h2><label class="tel" title="ETAGERE12">87654321</label><p><br>BOX65<br>UNITEZ</p>
</body>
</html>



Imaginez des centaines de pages de ce type et votre mission, récupérer les valeurs des 5 champs pour les mettre dans un tableur. Un travail titanesque à la main...

Pour cela utiliser, sed et les sous-chaines.

- ^<h2> : Ne travailler qu'avec les lignes commençant par la balises <h2>
- [A-Z]{6} : pour le 1er motif de recherche 6 lettres en capitales
- .* : n'importe quoi jusqu'au prochain motif
- ETAGERE[0-9]{2} : le terme ETAGERE suivi de 2 chiffres
- .* : n'importe quoi jusqu'au prochain motif
- [0-9]{8} : une suite de 8 chiffres
- .* : n'importe quoi jusqu'au prochain motif
- BOX[0-9]{2} : le terme BOX suivi de 2 chiffres
- .* : n'importe quoi jusqu'au prochain motif
- [A-Z]{6} : une suite de 6 lettres en capitales
- .* : n'importe quoi jusqu'à la fin de la ligne


Voilà pour les expressions régulières (regex). Pour les rendre compréhensibles par sed, il faudra "échapper" (\) les caractères {, }, ( et ) afin qu'ils ne soient pas considérés comme un élément d'une chaine de caractère mais comme un élément d'une expression régulière.

Ce qui donnera comme regex

^<h2>\([A-Z]\{6\}\).*\(ETAGERE[0-9]\{2\}\).*\([0-9]\{8\}\).*\(BOX[0-9]\{2\}\).*\([A-Z]\{6\}\).*

Tout est bien beau, mais comment virer le code HTML et le blablabla ? En entourant chaque motif de recherche par des parenthèses tout simplement et en rappelant ces extractions par \1 pour la première, \2 pour la seconde et ainsi de suite

  - le premier motif \1
  - le second : \2
  - le 3e : \3
  - Et ainsi de suite

 
Comme c'est pour un tableur, nous passerons par un fichier CSV. Il suffit donc de récupérer les motifs et de les séparer par un point virgule

\1;\2;\3;\4;\5;

Et comme il s'agit d'une substitution, on utilisera l'option -s de sed

Donc au final :

 sed -n 's/<h2>\([A-Z]\{6\}\).*\(ETAGERE[0-9]\{2\}\).*\([0-9]\{8\}\).*\(BOX[0-9]\{2\}\).*\([A-Z]\{6\}\).*/\1;\2;\3;\4;\5;/p' mon-fichier-entree.html



QUi retournera

$  sed -n 's/<h2>\([A-Z]\{6\}\).*\(ETAGERE[0-9]\{2\}\).*\([0-9]\{8\}\).*\(BOX[0-9]\{2\}\).*\([A-Z]\{6\}\).*/\1;\2;\3;\4;\5;/p' test.html              
ABCDEF;ETAGERE34;12345678;BOX06;UNITEA;
ZERDEF;ETAGERE04;88888888;BOX12;UNITER;
UYRDEF;ETAGERE12;87654321;BOX65;UNITEZ;



Si vous voulez créer un fichier csv, simplement rediriger la sortie du terminal > sortie.csv
Si le fichier doit être incrémenté par la lecture de plusieurs sources, utiliser >> à la place de > afin de ne pas écraser le fichier existant mais le compléter.

Enjoy

Dernière modification par cyrille (25-01-2021 21:08:45)


"Ils ne me comprennent point, je ne suis pas la bouche qu’il faut à ces oreilles."

Association Debian-Facile | Les cahiers du débutant | ISO Debian-FacilePage perso. sur #df

Hors ligne

Pied de page des forums