Bonjour,
je veux écrire un script shell qui est sensé modifier plusieurs lignes dans un fichier.
comment puis je le faire avec la commande sed?
merci d'avance!
Bonjour,
je veux écrire un script shell qui est sensé modifier plusieurs lignes dans un fichier.
comment puis je le faire avec la commande sed?
merci d'avance!
Pourquoi ne pas consulter la documentation ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 $ cat a aze rty aze rty $ sed -i "s/aze/uio/g" a $ cat a uio rty uio rty uio
Code : Sélectionner tout - Visualiser dans une fenêtre à part man sed
je l'ai essayé, et ça marche. Mais seulement sur une ligne or moi je voudrais le faire sur plusieurs lignes, et j'y arrive pas
Mon fichier ressemble à ça:
Et autre souci, je veux en fait pouvoir modifier ce qui se trouve dans les balises VALUE mais il y a des VARIABLE qui ont la même VALUE. Alors je sais pas comment m'y prendre pour ne modifier que celle que je souhaite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <VARIABLE name=#VM_CallBack_OutgoingTrunk empty=yes> <VALUE>10.165.122.110</VALUE> </VARIABLE> <VARIABLE name=#VM_CallBack_PrefixToAdd empty=yes> <VALUE>A02</VALUE>
sed -e "1,$ s/model/pattern/g" fichier
serait peut etre une solution alors
de la ligne 1 à la fin substitute model par pattern sur toute la ligne
ce qui 'évite le probleme de ta variable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 [root@SINAGIOSS50 tmp]# cat > toto VARIABLE name=#VM_CallBack_OutgoingTrunk empty=yes> <VALUE>10.165.122.110</VALUE> </VARIABLE> <VARIABLE name=#VM_CallBack_PrefixToAdd empty=yes> <VALUE>A02</VALUE> [root@SINAGIOSS50 tmp]# [root@SINAGIOSS50 tmp]# sed -e "1,$ s/VALUE\>.*\</VALUE\>TOTO\<\//g" toto VARIABLE name=#VM_CallBack_OutgoingTrunk empty=yes> <VALUE>TOTO</VALUE> </VARIABLE> <VARIABLE name=#VM_CallBack_PrefixToAdd empty=yes> <VALUE>TOTO</VALUE> [root@SINAGIOSS50 tmp]#
Essaie d'être clair
Quel motif cherches tu ? qu'est ce que tu veux en remplacement ? Donne nous un exemple de fichier en sortie et en entrée en mettant en évidence ce qui a changé.
je vais essayer et je vous dirai si ça marche, merci quand même!
Voici par exemple le contenu du fichier:
Et ce que je voudrais à la fin de la modification
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <VARIABLE name=#VM_SimpleEmailNotif empty=yes> <VALUE>1</VALUE> </VARIABLE> <VARIABLE name=#VM_EmailNotifMode empty=yes> <VALUE>2</VALUE> </VARIABLE> <VARIABLE name=#VM_ChangePassword empty=yes> <VALUE>1</VALUE> </VARIABLE> <VARIABLE name=#VM_ChangeLanguage empty=yes> <VALUE>1</VALUE> </VARIABLE>
Dans cet exemple, je change la valeur de deux variables, mais ça peut être beaucoup plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <VARIABLE name=#VM_SimpleEmailNotif empty=yes> <VALUE>0</VALUE> </VARIABLE> <VARIABLE name=#VM_EmailNotifMode empty=yes> <VALUE>3</VALUE> </VARIABLE> <VARIABLE name=#VM_ChangePassword empty=yes> <VALUE>1</VALUE> </VARIABLE> <VARIABLE name=#VM_ChangeLanguage empty=yes> <VALUE>1</VALUE> </VARIABLE>
Et petite remarque, la valeur de la variable VM_SimpleEmailNotif est la même que celle de VM_ChangePassword mais je ne veux pouvoir changer que celle de VM_SimpleEmailNotif.
Donc ma question est : comment je modifie les valeurs des variables et comment je fais quand j'ai des valeurs qui sont les mêmes et que je veux modifier qu'une seule d'entre elle par exemple.
J'espère avoir été clair
rien ne t'empeche de chainner les traitement dans sed
-e ........... -e ............ etc...etc....
sed est utile pour faire des substitutions, mais il travaille ligne par ligne. Dans ton exemple le NOM de la variable est sur la ligne précédant la ligne que tu veux modifier... donc c'est mort.
Deux solutions pour t'en sortir:
* Tu utilises awk. Il permet de définir des variables donc on peut s'en sortir,
* Ou bien tu supprimes les retours à la lignes
Je pense que l'utilisation de awk ici est plus simple et plus sûr.
Exemple (compliqué) avec sed:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 tr \\n \| <fichier.xml | \ sed -e 's,\(<VARIABLE name=#VM_SimpleEmailNotif[^>]*>[^<]*<VALUE>\)1</VALUE>,\10</VALUE>,g' | \ tr \| \\n
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager