Suppression d'un bloc sur detection de pattern
Résolu
Cobalt2225
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
Cobalt2225 Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
Cobalt2225 Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
re-bonjour les pro,
J'ai posé une question plus tot sur ce furum qui a ete trop rapidement résolue ;-)
Du coup, je pose une question aux experts, la, ca me depasse completement.
Ce que je souhaite, c'est ceci.
J'ai un fichier xml, que nous appelerons test1.xml.
ce fichier contient un grand nombre de balise.
Par exemple :
......................
...................
l'objectif du script unix, probablement une commande sed, mais j'en sais rien, ce serait de :
detecter la balise : <bsp_code>ZY</bsp_code>
Si on a trouvé cette chaine de caractere, alors on supprime uniquement dans le fichier ce qui est entre les balises <provider_product_consent> qui precedent et suive le motif trouvé.
En gros, je ne supprime que la partie en italique et gras ci dessus.
Si vous avez la solution, ce serait super.
En ce moment, je m'en sort, mais c'est pas propre du tout car je passe par une bidouille sous notepad++ ...
Je vous avoue que je n'ai aucune espece d'idée de comment je peux faire.
Pour votre information, jusqu'ici, j'ai quand meme reussi a m'en sortir en utilisant Notepad++ pour marquer les balises a supprimer puis en lancant cette commande unix sur le fichier Marqué:
sed -i '/^ <provider_product_consent>MARKED/,/^ <\/provider_product_consent>MARKED/d' test1.xml
Mais c'est pas beau !
J'ai posé une question plus tot sur ce furum qui a ete trop rapidement résolue ;-)
Du coup, je pose une question aux experts, la, ca me depasse completement.
Ce que je souhaite, c'est ceci.
J'ai un fichier xml, que nous appelerons test1.xml.
ce fichier contient un grand nombre de balise.
Par exemple :
......................
</bin_range> <bin_range> <from>900010</from> <to>900019</to> <effective_from_date>2018-09-06</effective_from_date> <status>ACTIVE</status> </bin_range> </bin_ranges> </provider_product_consent> <ital> <bold><provider_product_consent> <code1>HC199</code1> <airline_code>9887</airline_code> <airline_name>AIRFRANCE</airline_name> <underline><bsp_code>ZY</bsp_code></underline> <product_code>F8</product_code> <product_name>Name3</product_name> <effective_from_date>2018-09-04</effective_from_date> <consent_type> <no></no> </consent_type> <provider_code>CODE</provider_code> <provider_name>Legal Name</provider_name> <bin_ranges> <bin_range> <from>700000</from> <to>749999</to> <effective_from_date>2018-05-25</effective_from_date> <status>ACTIVE</status> </bin_range> </bin_ranges> </provider_product_consent></bold></ital> <provider_product_consent> <code1>HC198</code1> <airline_code>9887</airline_code> <airline_name>AIRFRANCE</airline_name> <bsp_code>TO</bsp_code> <product_code>F8</product_code>
...................
l'objectif du script unix, probablement une commande sed, mais j'en sais rien, ce serait de :
detecter la balise : <bsp_code>ZY</bsp_code>
Si on a trouvé cette chaine de caractere, alors on supprime uniquement dans le fichier ce qui est entre les balises <provider_product_consent> qui precedent et suive le motif trouvé.
En gros, je ne supprime que la partie en italique et gras ci dessus.
Si vous avez la solution, ce serait super.
En ce moment, je m'en sort, mais c'est pas propre du tout car je passe par une bidouille sous notepad++ ...
Je vous avoue que je n'ai aucune espece d'idée de comment je peux faire.
Pour votre information, jusqu'ici, j'ai quand meme reussi a m'en sortir en utilisant Notepad++ pour marquer les balises a supprimer puis en lancant cette commande unix sur le fichier Marqué:
sed -i '/^ <provider_product_consent>MARKED/,/^ <\/provider_product_consent>MARKED/d' test1.xml
Mais c'est pas beau !
A voir également:
- Suppression d'un bloc sur detection de pattern
- Forcer la suppression d'un fichier - Guide
- Comment détecter un traceur sur téléphone - Accueil - Confidentialité
- Bloc-notes (windows) - Télécharger - Traitement de texte
- Detection materiel pc - Guide
- Touslesdrivers detection - Télécharger - Pilotes & Matériel
1 réponse
Bonjour les zamis,
Je pense pouvoir m'en sortir si j'arrive a trouver la commande qui permet de ne supprimer que la ligne precedent un motif specifique.
Pour le moment, j'ai pu tester cette commande :
sed -n '$p;N;/PATTERN/{d};P;D;' test1.xml
cette commande supprime la ligne ou le motif PATTERN est trouvé ainsi que la précédente.
=> Mon objectif, c'est de ne supprimer que la precedente, pas la ligne avec PATTERN.
et si vous avez un commande qui permet de ne supprimer que la ligne Suivante du PATTERN trouvé, alors, vous me sauvez la vie ;-)
Merci !
Je pense pouvoir m'en sortir si j'arrive a trouver la commande qui permet de ne supprimer que la ligne precedent un motif specifique.
Pour le moment, j'ai pu tester cette commande :
sed -n '$p;N;/PATTERN/{d};P;D;' test1.xml
cette commande supprime la ligne ou le motif PATTERN est trouvé ainsi que la précédente.
=> Mon objectif, c'est de ne supprimer que la precedente, pas la ligne avec PATTERN.
et si vous avez un commande qui permet de ne supprimer que la ligne Suivante du PATTERN trouvé, alors, vous me sauvez la vie ;-)
Merci !
sed -n '/PATTERN/{d};P;D;' test1.xml > test41.xml
bon, reste plus qu'a trouver pour la ligne suivante ;-)
PS : Je sens que je vais aussi m'auto repondre pour le coup.
sed '/PATTERN/{n;d}' test1.xml > test41.xml
Voila une solution avec "ed" pour supprimer conjointement la ligne précédente et la ligne suivante d'un PATTERN donné sans toucher audit PATTERN :
y aurait il moyen de trouver une reponse avec sed, car je n'ai pas la commande ed dans mon emulateur shell que j'utilise (cygwin)...
par contre, la commande de suppression uniquement de la ligne suivante fonctionne bien.