L'ajout de l'élément XML dans le fichier XML à l'aide de sed commande dans un shell script
Je suis à l'aide de sed commande pour insérer un élément xml dans le fichier xml existant.
J'ai des fichier xml comme
<Students>
<student>
<name>john</>
<id>123</id>
</student>
<student>
<name>mike</name>
<id>234</id>
</student>
</Students>
Je veux ajouter un nouveau elememt comme
<student>
<name>NewName</name>
<id>NewID</id>
</student>
Donc mon nouveau fichier xml sera
<Students>
<student>
<name>john</>
<id>123</id>
</student>
<student>
<name>mike</name>
<id>234</id>
</student>
<student>
<name>NewName</name>
<id>NewID</id>
</student>
</Students>
Pour ce que j'ai écrit le script shell que
#! /bin/bash
CONTENT="<student>
<name>NewName</name>
<id>NewID</id>
</student>"
#sed -i.bak '/<\/Students>/i \ "$CONTENT" /root/1.xml
sed -i.bak '/<\/Students>/i \'$CONTENT'/' /root/1.xml
J'obtiens l'erreur comme
sed: can't read <name>NewName</name>: No such file or directory
sed: can't read <id>NewID</id>: No such file or directory
sed: can't read </student>: No such file or directory
Et dans le fichier xml, seulement <student>
est ajouté.
Les autres éléments ne sont pas ajoutés.
Personne ne sait pourquoi cette erreur?
Plusieurs outils existent pour manipuler des fichiers XML. Utiliser à la place des expressions régulières.
serait bien de vous à la liste de l'un (ou deux) de ces outils
serait bien de vous à la liste de l'un (ou deux) de ces outils
OriginalL'auteur User007 | 2014-04-23
Vous devez vous connecter pour publier un commentaire.
changer cela:
:
et puis:
voir édité.
OriginalL'auteur Taher Khorshidi
Vous ne pouvez pas avoir l'un sans échappement saut de ligne dans le sed texte de remplacement, c'est-à
$CONTENT
dans votre exemple. sed utilise le saut de ligne comme le shell ne, pour mettre fin à une commande.Si vous avez besoin d'un saut de ligne dans le texte de remplacement, vous avez besoin de les faire précéder d'une barre oblique inversée.
Il est une autre façon d'ajouter du texte à l'aide de la
r
option. Par exemple:Permet de dire que votre fichier principal est;
Vous le texte que vous souhaitez ajouter est dans un autre fichier (pas variable):
Vous pouvez le faire (à l'aide de
gnu sed
):Cependant, après avoir donné cette option, il est toujours une très mauvaise idée pour parser du xml avec expression régulière. Il rend la solution très fragile et facile à briser. Considérez cela comme un exercice d'apprentissage.
OriginalL'auteur jaypal singh
Cela pourrait fonctionner pour vous (GNU sed & Bash):
Alternativement, mettre les nouveaux étudiants dans un fichier et:
pour la variable n'oubliez pas que le dernier caractère de chaque ligne (sauf la dernière) doit se terminer par `\`. Pour le fichier de solution il suffit d'écrire le texte comme vous le voyez.
OriginalL'auteur potong