Modification de texte avec sed
Résolu
NegroTruc
-
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 !
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
-
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 $;-))
-
hello
avec awk$ awk '/debutbloc/ {print "textederemplacement"; while($0 !~ /finbloc/)getline; next} {print}' fichier blablabla Repere blablabla blablabla textederemplacement blablablo blablablo $ -