Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/01/2011, à 16:04

Postmortem

[Résolu] sed et les plages d'adresses

Bonjour à tous !
Une petite question sur sed ; lorsque l'on fait la commande ci-dessous, l'action de substitution 's/tutu/titi/' ne s'applique que jusqu'à la première ligne contenant MOTIF2 :

sed '/MOTIF1/,/MOTIF2/s/tutu/titi/' un_fichier.txt

Comment faire pour que cela s'applique jusqu'au 2ème ou 3ème voir le dernier MOTIF2 ??

Dernière modification par Postmortem (Le 29/01/2011, à 18:03)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#2 Le 28/01/2011, à 16:30

FRUiT

Re : [Résolu] sed et les plages d'adresses

sed -r

Non ?


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#3 Le 28/01/2011, à 18:07

Postmortem

Re : [Résolu] sed et les plages d'adresses

Salut FRUiT,
Non, ce n'est pas ça.
Un petit exemple pour que cela soit plus claire.
Voici le contenu du fichier test_sed.txt :

gzrgreggrgzzg
grzegzg
DEBUT
rgzergzeg
vvvvvvvvvvv
FIN
rgzagzhz
rgagrzgbrze
FIN
erzgartba
atabetbna
FIN
hjegkjhf
kjghefkjgheaz

Si je fais (le -r dit à sed d'utiliser les expressions rationnelles étendues à la place des basiques mais ça n'étend pas la plage d'adresses) :

sed '/DEBUT/,/FIN/s/..*/aaaaaaaaaaaaaaaaaaaaaaaaa/' test_sed.txt

J'obtiens :

gzrgreggrgzzg
grzegzg
aaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaa
rgzagzhz
rgagrzgbrze
FIN
erzgartba
atabetbna
FIN
hjegkjhf
kjghefkjgheaz

Les lignes modifiées sont celles entre DEBUT et le premier FIN (inclus).
Je voudrais que ça modifie jusqu'au 2ème, 3ème etc... ou dernier FIN.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#4 Le 29/01/2011, à 05:10

ehmicky

Re : [Résolu] sed et les plages d'adresses

Personnellement, si tu veux utiliser juste sed en une ligne, je pense pas que ce soit possible sans passer par des goto (:, b et t) ou utiliser une autre commande (externe ou bash) ou une expansion du style :

sed -n "/DEBUT/,$(sed -n '/FIN/=' FILE | sed -n '$p') s/.*/aaa/" FILE

Mais je peux me tromper !

Dernière modification par ehmicky (Le 29/01/2011, à 05:43)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#5 Le 29/01/2011, à 18:03

Postmortem

Re : [Résolu] sed et les plages d'adresses

Merci ehmicky ! Ça fonctionne... presque !! Manquait juste un petit ';p' à la fin du sed pour afficher le résultat !

sed -n "/DEBUT/,$(sed -n '/FIN/=' test_sed.txt | sed -n '$p') s/.*/aaa/;p" test_sed.txt

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#6 Le 29/01/2011, à 18:37

ehmicky

Re : [Résolu] sed et les plages d'adresses

Ah oui, c'est vrai, tu peux même enlever le ";". Je pensais que ton problème était plus "théorique" au niveau de la manière dont sed gère les adresses, parce que c'est vrai qu'il est moins puissant à ce niveau-là que awk.


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#7 Le 29/01/2011, à 18:45

Postmortem

Re : [Résolu] sed et les plages d'adresses

Il faut bien le ';', selon le cas ! Sans le ';' ça n'affiche que les lignes où il y a eu la substitution. Avec, toutes les lignes (modifiées ou non) sont affichées.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne