Comment trouver des informations dans une balise xml en utilisant grep?
Je suis en train de travailler sur un linux shell script pour rechercher des informations dans un fichier xml à l'aide grep
. Je suis sur un mac, qui je l'espère n'a pas trop d'importance.
Pour trouver l'information dont j'ai besoin, je lance:
grep -oP "<title>(.*)</title>" temp.xml
- Je obtenir en retour une liste de correspondances et cela inclut les <title>
tag.
Comment puis-je obtenir une liste des informations à l'intérieur de la title
tag, mais sans la title
balise à l'aide de grep?
source d'informationauteur Filype
Vous devez vous connecter pour publier un commentaire.
Je ne vois pas pourquoi vous voulez utiliser grep pour cela, alors qu'il peut être résolu avec une banale expression XPath:
Il existe de nombreux outils en ligne de commande pour XPath et ils sont généralement fourni avec le système d'exploitation.
Réponses à cette question sur un Débordement de Pile liste un certain nombre de ces outils.
Le problème avec
grep
ici, c'est que c'est un outil générique pour le traitement de texte et il n'est pas conscient de toute la structure XML. Pour un scénario très simple, vous pouvez le faire fonctionner. Si le document est complexe ou si vous êtes en utilisant ce dans un script qui va survivre des mois ou des années, et pas seulement un emploi, vous pouvez finir par se sentir désolé pour les résultats.XPath fait, il est facile de faire la différence entre les nommés de la même façon, les balises qui apparaissent dans des contextes différents dans un document.
Extraire le titre de l'article représenté par ce document avec
grep
serait un échec si vous avez utilisé l'un de l'autre réponses postées ici. Vous pourriez techniquement écrire l'expression régulière pour obtenir ce que vous avez besoin, mais il est beaucoup plus facile avec XPath.Si vous savez que vous avez affaire à un banal document et le format ne change pas, ou si c'est un emploi à temps où vous pouvez rapidement valider les résultats, vous pouvez aller pour
grep
comme expliqué par d'autres.Depuis que vous utilisez déjà
grep -P
pourquoi n'utilisez-vous pas de ses caractéristiques?Dans le cas général, XPath est la bonne solution, mais pour les petites scénarios, oui Virginie, il peut être fait.
C'est pas la meilleure solution, je recherche pour XML lib en bash mais vous pouvez le faire:
Vous pouvez en installer xgrep à l'aide de xpath comme suggéré dans Tom's réponse
l'homme xgrep