Modification de texte avec sed

Résolu
NegroTruc -  
 NegroTruc -
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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    
    $
    ;-))
    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    avec awk
    $ awk '/debutbloc/ {print "textederemplacement"; while($0 !~ /finbloc/)getline; next} {print}' fichier
    blablabla
    Repere
    blablabla
    blablabla
    textederemplacement
    blablablo
    blablablo 
    $
    
    0
  3. NegroTruc
     
    Cela fonctionne avec sed.
    Je note la commande awk, au cas où.

    Merci à vous deux ! :)
    0