Modification de texte avec sed

Résolu
Bonjour !

Je cherche à modifier un texte avec sed en donnant une condition avant.

En gros, j'ai un morceau dans ce style là :
...
blablabla
Repere
blablabla
blablabla
debutbloc
blablabli
blablabli
blablabli
finbloc
blablablo
blablablo
...

Et je veux ça :
...
blablabla
Repere
blablabla
blablabla
textederemplacement
blablablo
blablablo
...

Et seulement si je trouve "Repere" juste avant.

Je pensais utiliser la commande suivante, mais elle ne fonctionne pas (erreur : "sed: -e expression n°1, caractère 0: '{' non refermée ")

sed '/Repere/,/finbloc/{ c/debutbloc/,/finbloc/textederemplacement; }' fichier.xml > fichier.xml.NEW

J'avais d'autres comandes qui fonctionnait :
sed '/Repere/,/finbloc/ c\textederemplacement' fichier.xml > fichier.xml.NEW
==> Remplace tout de Repere jusque finbloc par textederemplacement

sed '/Repere/,/finbloc/ { /debutbloc/,/finbloc/ s/.*/textederemplacement/; }' fichier.xml > fichier.xml.NEW
==> Me remplace bien uniquement la partie debutbloc-fin bloc, mais je me retrouve avec textederemplacement copié sur le nombre de lignes du bloc, alors que je ne le veux qu'une seule fois.

Et je n'arrive pas à combiner les deux commandes...

Merci pour votre aide !

3 réponses

  1. Cela fonctionne avec sed.
    Je note la commande awk, au cas où.

    Merci à vous deux ! :)
    1. Contributeur
      hello
      avec awk
      $ awk '/debutbloc/ {print "textederemplacement"; while($0 !~ /finbloc/)getline; next} {print}' fichier
      blablabla
      Repere
      blablabla
      blablabla
      textederemplacement
      blablablo
      blablablo 
      $
      
      1. Contributeur
        Salut,

        $ cat plop
        ...
        blablabla
        Repere
        blablabla
        blablabla
        debutbloc
        blablabli
        blablabli
        blablabli
        finbloc
        blablablo
        blablablo
        
        $ cat script.sed 
        /Repere/,/finbloc/{
        /debutbloc/{
        :z
        N
        /finbloc/! bz
        s/.*/le texte de remplacement/
        }
        }
        
        $ sed -f script.sed plop 
        ...
        blablabla
        Repere
        blablabla
        blablabla
        le texte de remplacement
        blablablo
        blablablo
        
        $
        ;-))