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 !
A voir également:

3 réponses

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

Merci à vous deux ! :)
0