Ajouter/supprimer des balises xml à l'aide d'un script bash
J'ai un fichier xml que je veux configurer à l'aide d'un script bash. Par exemple si j'ai eu xml:
<a>
<b>
<bb>
<yyy>
Bla
</yyy>
</bb>
</b>
<c>
<cc>
Something
</cc>
</c>
<d>
bla
</d>
</a>
(informations confidentielles supprimé)
Je voudrais écrire un script bash qui permet de supprimer la section <b>
(ou un commentaire) mais de garder le reste de l'xml intacte. Je suis assez nouveau le l'ensemble de script chose. Je me demandais si quelqu'un pouvait me donner un indice sur ce que je devrais regarder dans.
Je pensais que sed pourrait être utilisé sauf sed est un éditeur de ligne. Je pense qu'il serait facile de supprimer les <b>
tags cependant, je ne suis pas sûr si sed serait en mesure de supprimer tout le texte entre la <b>
balises.
J'aurai aussi besoin d'écrire un script pour ajouter la section supprimée.
- J'aurais à vous déconseillons d'utiliser bash/sed/awk/etc. pour ce genre de chose et de recommander à l'aide de Python, Ruby ou Perl.
Vous devez vous connecter pour publier un commentaire.
Ce ne serait pas difficile à faire dans sed sed travaille également sur les plages.
Essayez ceci (en supposant que xml est un fichier nommé foo.xml):
-je vais écrire les changements dans le fichier d'origine (utilisez -je.bak à garder une copie de sauvegarde de l'original)
Ce sed commande à exécuter une action d (supprimer) sur toutes les lignes spécifiées dans la gamme
Donc, en clair, cette commande va supprimer toutes les lignes entre et y compris la ligne <b>, et la ligne </b>
Si vous préférez en commentaire les lignes, essayez l'une de ces:
<b>
sur la même ligne, et rien de l'importance à la suite</b>
sur la même ligne, c'est à dire ne fonctionne pas pour XML en général, mais peuvent travailler pour le demandeur du cas particulier.À l'aide de xmlstarlet:
mktemp
pour générer un fichier temporaire avec une garantie de nonconflicting nom, qui peut également avoir l'effet secondaire d'éviter certaines attaques de sécurité liées à l'utilisation de la constante de noms de fichiers temporaires.sed
.Vous pouvez utiliser une transformation XSLT comme ce qui est une modification de l'identité de la transformation. Il copie tout le contenu par défaut, et a un modèle vide pour
b
qui ne fait rien(en fait, la suppression de la sortie):Créer un script bash qui exécute la transformation à l'aide de Java et Xalan de l'utilitaire de ligne de commande comme ceci:
Le résultat est le suivant:
EDIT: si vous préférez avoir le
b
commentée, pour le rendre plus facile à mettre en arrière, puis d'utiliser cette feuille de style:Il produit de cette sortie:
Si vous voulez le plus approprié de remplacement pour
sed
pour les données XML, il serait un processeur XSLT. Commesed
c'est une langue complexe mais spécialisé pour la tâche de XML-à-tout des transformations.D'autre part, cette ne semblent être le point sur lequel je voudrais sérieusement envisager de passer à un vrai langage de programmation comme Python.
@OP, vous pouvez utiliser awk par exemple