Ajout d'une option en fin de section xml
Résolu/Fermé
LpS33
Messages postés
13
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
17 juillet 2019
-
16 août 2018 à 10:07
LpS33 Messages postés 13 Date d'inscription jeudi 16 août 2018 Statut Membre Dernière intervention 17 juillet 2019 - 17 août 2018 à 08:09
LpS33 Messages postés 13 Date d'inscription jeudi 16 août 2018 Statut Membre Dernière intervention 17 juillet 2019 - 17 août 2018 à 08:09
A voir également:
- Ajout d'une option en fin de section xml
- Xml viewer - Télécharger - Édition & Programmation
- Option booster free avis - Accueil - Guide opérateurs et forfaits
- Ajout rapide snap - Forum Snapchat
- Ajout rapide snap - Forum Snapchat
- Saut de section word - Guide
3 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
16 août 2018 à 10:27
16 août 2018 à 10:27
Salut,
Rajouter l'option "
$ cat fich
<goals>clean -Doption1
-Doption2</goals>
<goals>bad -Doption1
-Doption2</goals>
$ sed '\#<goals>clean#,\#</goals>#{s#</goals>#\n-Doption3}' fich
<goals>clean -Doption1
-Doption2
-Doption3</goals>
<goals>bad -Doption1
-Doption2</goals>
Rajouter l'option "
-i" si ça fait le job et si la version de sed le permet…
LpS33
Messages postés
13
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
17 juillet 2019
16 août 2018 à 10:39
16 août 2018 à 10:39
Bonjour Zipe31,
Merci beaucoup ! Ça fonctionne parfaitement !
Juste pour ma culture personnelle, peux-tu simplement m'expliquer le mécanisme de cette syntaxe ? Je me battais avec sed '/<goals>clean/ s/$/\n-Doption3/' mais ça l'ajoutait en deuxième ligne, pas avant la balise de fin...
Merci beaucoup ! Ça fonctionne parfaitement !
Juste pour ma culture personnelle, peux-tu simplement m'expliquer le mécanisme de cette syntaxe ? Je me battais avec sed '/<goals>clean/ s/$/\n-Doption3/' mais ça l'ajoutait en deuxième ligne, pas avant la balise de fin...
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
16 août 2018 à 12:23
16 août 2018 à 12:23
\#<goals>clean#,\#</goals># {
s#</goals>#\n-Doption3
}
En 1er lieu je cible un ensemble de ligne, délimité par un
/motif_départ/et un
/motif_fin/, le tout séparé par une virgule :
/motif_départ/,/motif_fin/
Comme ta balise
</goals>contient un "/", j'ai préféré remplacer le séparateur par défaut (qui est un "/") par un croisillon (#), d'où la syntaxe un peu particulière.
Si cet ensemble de ligne est trouvé, on applique la/les commande(s) située(s) entre les accolades :
s#</goals>#\n-Doption3
À savoir :
On substitue le motif "</goals>" par, successivement :
- un saut de ligne (\n)
- le motif à rajouter (-Doption3)
- et pour finir l'ensemble du motif lui-même, ici symbolisé par le caractère esperluette (&) qui est un raccourci définissant la totalité du motif (ce qui empêche de le retaper inutilement).
LpS33
Messages postés
13
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
17 juillet 2019
16 août 2018 à 13:33
16 août 2018 à 13:33
Merci beaucoup ! J'avais fini par trouver :-) J'avais zappé le / dans ma balise de fin et je ne me souvenais pas qu'il fallait faire précéder le nouveau séparateur par un \ d'où le \#motif_depart#,\#motif_fin#
LpS33
Messages postés
13
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
17 juillet 2019
16 août 2018 à 15:01
16 août 2018 à 15:01
J'ai traité quasiment tous les cas de figures : avec ou sans espaces entre <goals> et clean.
Il me reste un cas qui me résiste : si <goals> et clean sont séparés par un retour à la ligne :
J'ai testé [:space:]*, [ \t\n]*, [^c]*...
Il me reste un cas qui me résiste : si <goals> et clean sont séparés par un retour à la ligne :
<goals>
clean -Doption1
-Doption2</goals>
J'ai testé [:space:]*, [ \t\n]*, [^c]*...
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
16 août 2018 à 16:30
16 août 2018 à 16:30
Là c'est un peu plus complexe, il faut d'abord tout regrouper sur une seule ligne (avec les sauts de lignes matérialisés (\n)) dans le buffer et ensuite appliquer la commande de substitution.
$ cat fich
<goals>clean -Doption1
-Doption2</goals>
<goals>bad -Doption1
-Doption2</goals>
<goals>
clean -Doption1
-Doption2</goals>
$ sed '/<goals>/{:z;N;\#</goals>#!bz;/<goals>[ \n]*clean/{s#</goals>#\n-Doption3}}' fich
<goals>clean -Doption1
-Doption2
-Doption3</goals>
<goals>bad -Doption1
-Doption2</goals>
<goals>
clean -Doption1
-Doption2
-Doption3</goals>
LpS33
Messages postés
13
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
17 juillet 2019
17 août 2018 à 08:09
17 août 2018 à 08:09
Bonjour zipe31.
Je pensais effectivement au N.
Merci beaucoup et bonne journée.
Je pensais effectivement au N.
Merci beaucoup et bonne journée.