Sed recalcitrant
Résolu
eric_49
-
eric_49 -
eric_49 -
Bonjour,
Je voudrais dans un fichier test.txt ,
1 . faire une recherche de motif sur plusieurs lignes
2 . à la suite de ce motif ajouter 3 lignes
3 . faire cet ajout pour toutes les occurences du motif en question
j'ai essayé ça :
sed -n '/vip/d;/^debut_motif/,/fin_motif$/p' test.txt | sed -f prog.sed > sortie.txt
le prog.sed contient ça :
a\
ligne1\
ligne2\
ligne3
Donc ça ne fonctionne pas du tout : le script colle le texte partout !!
je pense qu'il faudrait arriver à chainer les commandes du type :
sed '/motif/; ajout du texte' test.txt > sortie.txt
quelqu'un peut me donner un coup de main ?
merci d'avance,
Je voudrais dans un fichier test.txt ,
1 . faire une recherche de motif sur plusieurs lignes
2 . à la suite de ce motif ajouter 3 lignes
3 . faire cet ajout pour toutes les occurences du motif en question
j'ai essayé ça :
sed -n '/vip/d;/^debut_motif/,/fin_motif$/p' test.txt | sed -f prog.sed > sortie.txt
le prog.sed contient ça :
a\
ligne1\
ligne2\
ligne3
Donc ça ne fonctionne pas du tout : le script colle le texte partout !!
je pense qu'il faudrait arriver à chainer les commandes du type :
sed '/motif/; ajout du texte' test.txt > sortie.txt
quelqu'un peut me donner un coup de main ?
merci d'avance,
A voir également:
- Sed recalcitrant
- Supprimer fichier récalcitrant - Guide
- Remplacez le mot sed par le mot mais dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? - Guide
- Sed et ses caprices (ou les miens) ✓ - Forum Linux / Unix
- Sed crlf - Astuces et Solutions
- Sed - Remplacement texte par retour à la ligne ? ✓ - Forum Linux / Unix
9 réponses
Salut,
[tmpfs]$ cat plop blablabla blablablablablabla motif Début blablabla blablabla blablabla motif Fin blablablablablabla blablabla motif Début blablablablablabla motif Fin blablabla blablablablablabla blablabla blablabla motif Début blablabla motif Fin blablabla blablabla [tmpfs]$ sed '/motif Début/,/motif Fin/{/motif Fin/a\ ligne1\ ligne2\ ligne3 } ' plop blablabla blablablablablabla motif Début blablabla blablabla blablabla motif Fin ligne1 ligne2 ligne3 blablablablablabla blablabla motif Début blablablablablabla motif Fin ligne1 ligne2 ligne3 blablabla blablablablablabla blablabla blablabla motif Début blablabla motif Fin ligne1 ligne2 ligne3 blablabla blablabla [tmpfs]$;-))
Ok, ça marche !
J'avais essayé ça mais je n'avais pas remis le motif de fin.
Bravo, tu es vraiment le gourou du sed.
Je vais m'y mettre sérieusement...
et merci beaucoup
eric
J'avais essayé ça mais je n'avais pas remis le motif de fin.
Bravo, tu es vraiment le gourou du sed.
Je vais m'y mettre sérieusement...
et merci beaucoup
eric
Encore un petit soucis :
la commande fonctionne quand je colle dans un terminal, par contre en script ça ne passe pas...
le shell me repond :
fonction '/motif_a_eviter/d;/debut_motif/,/fin_motif/{/fin_motif/a\ cannot be parsed
??
dans un script il faut peut etre mettre sur une seule ligne ?
la commande fonctionne quand je colle dans un terminal, par contre en script ça ne passe pas...
le shell me repond :
fonction '/motif_a_eviter/d;/debut_motif/,/fin_motif/{/fin_motif/a\ cannot be parsed
??
dans un script il faut peut etre mettre sur une seule ligne ?
voilà mon script :
sed '/vip/d;/^<Name>X/,/Icon>$/{/Icon>$/a\
ligne1\
ligne2\
ligne3
}
' test.txt > sortie.txt
je ne comprends pas
sed '/vip/d;/^<Name>X/,/Icon>$/{/Icon>$/a\
ligne1\
ligne2\
ligne3
}
' test.txt > sortie.txt
je ne comprends pas
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'ai compris l'erreur jipicy :
j'insère des lignes comme celles là :
<Attribute>\
<Name>ov_label1</Name>\
<Value>ORACLE</Value>\
<ActionRef>ora_consigne-1<\/ActionRef>\
<ActionRef>ora_consigne-2<\/ActionRef>\
<ActionRef>ora_consigne-3<\/ActionRef>
et ça fait l'erreur en question (si je met ligne1, ligne2 etc... pas de pb)
j'ai essayé d'echapper les / avec des \ mais ce n'est pas bon....et meme avec la première ligne
ça fait l'erreur aussi !!
j'insère des lignes comme celles là :
<Attribute>\
<Name>ov_label1</Name>\
<Value>ORACLE</Value>\
<ActionRef>ora_consigne-1<\/ActionRef>\
<ActionRef>ora_consigne-2<\/ActionRef>\
<ActionRef>ora_consigne-3<\/ActionRef>
et ça fait l'erreur en question (si je met ligne1, ligne2 etc... pas de pb)
j'ai essayé d'echapper les / avec des \ mais ce n'est pas bon....et meme avec la première ligne
ça fait l'erreur aussi !!
Y'a pas de raisons que ça ne marche pas :-\
ssh$ sed '/motif Début/,/motif Fin/{/motif Fin/a\ <lalala>xxx</lalala>\ <lololo>yyy</lololo>\ <lululu>zzz</lululu> } ' plop blablabla blablablablablabla motif Début blablabla blablabla blablabla motif Fin <lalala>xxx</lalala> <lololo>yyy</lololo> <lululu>zzz</lululu> blablablablablabla blablabla motif Début blablablablablabla motif Fin <lalala>xxx</lalala> <lololo>yyy</lololo> <lululu>zzz</lululu> blablabla blablablablablabla blablabla blablabla motif Début blablabla motif Fin <lalala>xxx</lalala> <lololo>yyy</lololo> <lululu>zzz</lululu> blablabla blablablaColle-nous un bout de ton fichier et ta syntaxe "sed" s'il te plaît...
ok, voilà le script (sans fonction ^^) :
#!/usr/bin/ksh
sed '/vip/d;/^<Name>X/,/Icon>$/{/Icon>$/a\
<Attribute>
}
' test.txt > sortie.txt
et voilà un extrait du fichier à modifier :
<Service>
<Name>PROD_ORA8</Name>
<Label>Oracle 8</Label>
<Icon>logo_oracle.png</Icon>
<CalcRuleRef>Most critical</CalcRuleRef>
<MsgPropRuleRef>Unchanged</MsgPropRuleRef>
</Service>
<Association>
<Dependency/>
<SourceRef>XGDGF</SourceRef>
<TargetRef>PROD_ORA8</TargetRef>
<PropRuleRef>Unchanged</PropRuleRef>
</Association>
<Service>
<Name>XFDGF</Name>
<Label>XFDGF</Label>
<Icon>logo_oracle.png</Icon>
<Depth>2</Depth>
<CalcRuleRef>Most critical</CalcRuleRef>
<MsgPropRuleRef>Unchanged</MsgPropRuleRef>
</Service>
<Association>
<Dependency/>
<SourceRef>xtruc.fr</SourceRef>
<TargetRef>XBIDXX</TargetRef>
<PropRuleRef>Unchanged</PropRuleRef>
</Association>
<Association>
<Dependency/>
<SourceRef>XDFEYY</SourceRef>
<TargetRef>PROD_ORA8</TargetRef>
<PropRuleRef>Unchanged</PropRuleRef>
</Association>
<Service>
<Name>XXTTYU</Name>
<Icon>logo_oracle.png</Icon>
<Depth>2</Depth>
<CalcRuleRef>Most critical</CalcRuleRef>
chez moi ça ne passe pas !!
#!/usr/bin/ksh
sed '/vip/d;/^<Name>X/,/Icon>$/{/Icon>$/a\
<Attribute>
}
' test.txt > sortie.txt
et voilà un extrait du fichier à modifier :
<Service>
<Name>PROD_ORA8</Name>
<Label>Oracle 8</Label>
<Icon>logo_oracle.png</Icon>
<CalcRuleRef>Most critical</CalcRuleRef>
<MsgPropRuleRef>Unchanged</MsgPropRuleRef>
</Service>
<Association>
<Dependency/>
<SourceRef>XGDGF</SourceRef>
<TargetRef>PROD_ORA8</TargetRef>
<PropRuleRef>Unchanged</PropRuleRef>
</Association>
<Service>
<Name>XFDGF</Name>
<Label>XFDGF</Label>
<Icon>logo_oracle.png</Icon>
<Depth>2</Depth>
<CalcRuleRef>Most critical</CalcRuleRef>
<MsgPropRuleRef>Unchanged</MsgPropRuleRef>
</Service>
<Association>
<Dependency/>
<SourceRef>xtruc.fr</SourceRef>
<TargetRef>XBIDXX</TargetRef>
<PropRuleRef>Unchanged</PropRuleRef>
</Association>
<Association>
<Dependency/>
<SourceRef>XDFEYY</SourceRef>
<TargetRef>PROD_ORA8</TargetRef>
<PropRuleRef>Unchanged</PropRuleRef>
</Association>
<Service>
<Name>XXTTYU</Name>
<Icon>logo_oracle.png</Icon>
<Depth>2</Depth>
<CalcRuleRef>Most critical</CalcRuleRef>
chez moi ça ne passe pas !!
ssh$ cat eric.ksh #! /bin/ksh sed '/vip/d;/^<Name>X/,/Icon>$/{/Icon>$/a\ <Attribute> } ' toto ssh$ ./eric.ksh <Service> <Name>PROD_ORA8</Name> <Label>Oracle 8</Label> <Icon>logo_oracle.png</Icon> <CalcRuleRef>Most critical</CalcRuleRef> <MsgPropRuleRef>Unchanged</MsgPropRuleRef> </Service> <Association> <Dependency/> <SourceRef>XGDGF</SourceRef> <TargetRef>PROD_ORA8</TargetRef> <PropRuleRef>Unchanged</PropRuleRef> </Association> <Service> <Name>XFDGF</Name> <Label>XFDGF</Label> <Icon>logo_oracle.png</Icon> <Attribute> <Depth>2</Depth> <CalcRuleRef>Most critical</CalcRuleRef> <MsgPropRuleRef>Unchanged</MsgPropRuleRef> </Service> <Association> <Dependency/> <SourceRef>xtruc.fr</SourceRef> <TargetRef>XBIDXX</TargetRef> <PropRuleRef>Unchanged</PropRuleRef> </Association> <Association> <Dependency/> <SourceRef>XDFEYY</SourceRef> <TargetRef>PROD_ORA8</TargetRef> <PropRuleRef>Unchanged</PropRuleRef> </Association> <Service> <Name>XXTTYU</Name> <Icon>logo_oracle.png</Icon> <Attribute> <Depth>2</Depth> <CalcRuleRef>Most critical</CalcRuleRef>