Petite remarque : toutes les choses auxquelles nous avons réagi sont données directement par le site https://www.shellcheck.net/
Tu copies-colles ton code et tu gagnes du temps.
Petite remarque : toutes les choses auxquelles nous avons réagi sont données directement par le site https://www.shellcheck.net/
Tu copies-colles ton code et tu gagnes du temps.
Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.
Bonjour,
Merci beaucoup.
J'ai regardé et j'ai rien vu.
Pour te montrer un exemple un peut plus précis de ce que j'ai (un peu maquillé) :
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <contrat name="CONTRAT_test"><description>contrat CONTRAT_test</description><etatContrat><etat name="toto:etatContrat:test"><description>Test</description></etat></etatContrat><services> <service name="InterfaceTest" wsdl="http://xxx.xxx.xxx.xxx:yyyy/mon_test/services/MONCONTEXTETEST/CONTRAT_test/InfoTest?wsdl" accessPoint="http://xxx.xxx.xxx.xxx:yyyy/mon_test/services/MONCONTEXTETEST/CONTRAT_Test/InfoTest"><description>Description</description></service></contrat>
Marco.
Forcément, vu comme ça, ça ne peut pas/plus marcher ;-(
Dans ton exemple primaire, les balises "<contrat>" étaient sur des lignes indépendantes (d'ailleurs "disedorgue" a évoqué à juste titre que le format de fichier xml pouvait ne pas avoir de retour à la ligne).
Là elles ne le sont plus, donc si tu supprimes la ligne contenant l'IP, tu supprimes aussi la balise fermante "</contrat>" et là ça devient problématique et insolvable avec la/les syntaxe(s) donnée(s) plus haut ;-(
$ man woman
Il n'y a pas de page de manuel pour woman.
Désolé Disedorgue. je me suis en effet trompé en récupérant ce bout de mon fichier XML et en le manipulant :
Je n'avais pas coupé au bon endroit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ...<contrats> ... <contrat name="CONTRAT_test"><description>contrat CONTRAT_test</description><etatContrat><etat name="toto:etatContrat:test"><description>Test</description></etat></etatContrat><services> <service name="InterfaceTest" wsdl="http://xxx.xxx.xxx.xxx:yyyy/mon_test/services/MONCONTEXTETEST/CONTRAT_test/InfoTest?wsdl" accessPoint="http://xxx.xxx.xxx.xxx:yyyy/mon_test/services/MONCONTEXTETEST/CONTRAT_Test/InfoTest"><description>Description</description></service> </services></contrats>...
En espérant que ça soit un peut plus explicite ?
Comment faire dans ce cas zipe31 s'il te plaît ?
Si tu as gnu sed (avec l'option -z) , essaye:
Code : Sélectionner tout - Visualiser dans une fenêtre à part sed -z 's#<service [^>]*>#\x2&#g;s#</service>#&\x2#g;s#\x2<service[^\x2]*monip[^\x2]*\x2##g;s#<contrat[ >]#\x1&#g;s#</contrat>#&\x1#g;s#\x1<contrat[ >][^\x2]*\x1##g;s#[\x1\x2]##g' fichier.xml
Cordialement.
À chaque fois que tu nous remets un bout de ton fichier, il faut réinventer la roue et tout refaire parce que le code donné ne correspond plus
Sans compter qu'à chaque fois, il y a des erreurs dans ton fichier (balise <contrat …></contratS>)
Je passe mon tour
$ man woman
Il n'y a pas de page de manuel pour woman.
À sa décharge (et à la mienne), il disait aussi :
Je dois absolument le faire en Bash car je dois intervenir sur une plateforme où je ne peux pas trop installer de nouvelles choses : donc ne ne me proposez pas de Perl ou de Python s'il vous plaît...
$ man woman
Il n'y a pas de page de manuel pour woman.
Tout dépend de la politique de la boîte… tu peux très bien avoir un environnement restreint.
$ man woman
Il n'y a pas de page de manuel pour woman.
Oui, et surtout pas d'outils qui permet de manipuler des fichiers dans un format imposé...
Cordialement.
Moi, je ne me sens pas l'obligation de travailler à la place de Cotmar.
S'il y a déjà installé des outils xml, on peut faire ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $ xmlstarlet select -t -m "/services/contrats/contrat/service" -v "@url" -n afac_xml.xml http://monip1 http://monip2 http://monip2 http://monip2 http://monip1 http://monip2 http://monip3
Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.
Je n'en demande pas autant... on croirai que tu m'accuses d'avoir un poil dans la main et si je reviens sur d'autres posts, ce n'est pas la première fois. Si je viens sur un forum c'est pour y chercher de l'aide après avoir déjà cherché de mon côté et tenté de trouver sans succès, mais jamais avant.
Je précise aussi que si j'ai pris le temps d'écrire une présentation aussi longue au départ c'est précisément pour donner les pistes que j'ai suivi, montrer à quel endroit j'en suis (aussi montrer ma bonne foi) et expliquer ce qui cloche et pourquoi je coince. Là dessus, vous en savez tous largement plus que moi et je remercie tous ceux qui acceptent de m'aider. Votre titre d'experts n'est en rien usurpé.
Bonne soirée,
Marco.
Bonjour,
J'ai continué de mon côté en intégrant vos remarques et en particulier la commande xmlstarlet. Pas évident, mais ouf ça se fait petit à petit :
Merci et comme toujours, si jamais vous avez des remarques, surtout n'hésitez pas. Désolé aussi pour la longueur de ce sujet...
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 #!/bin/bash #----------------------------------------------------------------------- # Mapping des fichiers ".xml" # Pour convertir les adresses de prod en adresses de test # Exemple de exemple.CSV : #xxx.xxx.xxx.xx1:zzz;aaa.aaa.aaa.bb1:ccc #xxx.xxx.xxx.xx2:zzz;aaa.aaa.aaa.bb2:ccc #xxx.xxx.xxx.xx3:yyy;aaa.aaa.aaa.bb3:ddd #xxx.xxx.xxx.xx4:zzz;aaa.aaa.aaa.bb4:ccc #xxx.xxx.xxx.xx5:zzz;suppr => Pour marquer la/les ligne(s) à supprimer #----------------------------------------------------------------------- #----------------------------------------------------------------------- # Gestion derreurs #----------------------------------------------------------------------- usage() { echo "$1" echo "Usage : $0 ficher_de_mapping.txt fichierRecu.xml Pour supprimer une ligne du fichier veuillez insérer la ligne suivante dans le fichier de mapping : IP_origine:suppr Les autres lignes devront etre selon le modèle : IP_origine;IP_destination " exit $2 } #----------------------------------------------------------------------- # Programme principal #----------------------------------------------------------------------- # Date du jour pour historiser la version du fichier dateSys=$(date '+%Y-%m-%d') if [ "$#" -ne "2" ] then usage "Nombre d arguments invalide : " 80 else [ -f "$1" ] || usage "Le premier argument n est pas un fichier" 81 [ -f "$2" ] || usage "Le second argument n est pas un fichier" 82 # Copie de sécurité du fichier à modifier cp $2 $2.old # Remplacement while read line do original="$(echo $line | cut -d\; -f1)" new="$(echo $line | cut -d\; -f2)" sed -i -e "s/${original}/${new}/g" $2 done < $1 # Pour supprimer les lignes sélectionnées au premier tour monNoeud = $(xmlstarlet select -t -m "/services-logiciel/mas/contrats/contrat/services/service" -v "@wsdl" -n $2 | grep suppr) if [ "$monNoeud" -e "suppr" ] then #La suppression en fonction du contenu de la variable xmlstarlet ed -d "/services-logiciel/mas/contrats/contrat/services/service [@wsdl='${monNoeud}']" $2 > $2 fi #ToDo : La possibilité que l'on doive supprimer plusieurs serveurs ??? fi #----------------------------------------------------------------------- # Fin #----------------------------------------------------------------------- exit 0
Cordialement,
Marco.
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