Je dois obtenir le contenu HTML entre une paire de balises données en utilisant un script bash . À titre d'exemple, avec le code HTML ci-dessous:
<html>
<head>
</head>
<body>
text
<div>
text2
<div>
text3
</div>
</div>
</body>
</html>
En utilisant la commande/script bash, étant donné le body tag, nous obtiendrions:
text
<div>
text2
<div>
text3
</div>
</div>
Merci d'avance.
le traitement de texte brut n'est pas bon pour l'analyse HTML/XML. J'espère que cela pourrait vous donner une idée:
kent$ xmllint --xpath "//body" f.html
<body>
text
<div>
text2
<div>
text3
</div>
</div>
</body>
Avec sed dans Shell/bash, vous n'avez pas besoin d'installer autre chose.
tag=body
sed -n "/<$tag>/,/<\/$tag>/p" file
Personnellement, je trouve très utile d’utiliser la commande hxselect
(souvent avec l’aide de hxclean
) du paquet html-xml-utils. Ce dernier corrige (parfois cassé) le fichier HTML pour corriger le fichier XML et le premier permet d’utiliser les sélecteurs CSS pour obtenir le ou les nœuds dont vous avez besoin. Avec l'utilisation de l'option -c
, il supprime les balises environnantes. Toutes ces commandes fonctionnent sur stdin et stdout. Donc, dans votre cas, vous devriez exécuter:
$ hxselect -c body <<HTML
<html>
<head>
</head>
<body>
text
<div>
text2
<div>
text3
</div>
</div>
</body>
</html>
HTML
pour obtenir ce dont vous avez besoin. Clair et simple.
Une autre option consiste à utiliser l'utilitaire multi-plateforme xidel
( page d'accueil sur SourceForge , référentiel GitHub ), qui peut gérer à la fois XML et HTML:
xidel in.html -e '/html/body/node()' --printed-node-format=html
BASH est probablement le mauvais outil pour cela. Essayez plutôt un script Python en utilisant la puissante bibliothèque Beautiful Soup .
Ce sera plus de travail au début, mais à long terme (ici: après une heure), les gains de temps compenseront l'effort supplémentaire.