web-dev-qa-db-fra.com

Sed supprimer les balises du fichier html

J'ai besoin de supprimer toutes les balises d'un html avec un script bash en utilisant la commande sed. J'ai essayé avec ça

sed -r 's/[\<][\/]?[a-zA-Z0-9\=\"\-\#\.\& ]+[\/]?[\>]//g' $1

et avec ça

sed -r 's/[\<][\/]?[.]*[\/]?[\\]?[\>]//g' $1

mais il me manque encore quelque chose, des suggestions ??

16
michste93

Vous pouvez soit utiliser l'un des nombreux convertisseurs HTML en texte , utiliser l'expression rationnelle de Perl si possible <.+?> ou s'il doit être sed utilisez <[^>]*>

sed -e 's/<[^>]*>//g' file.html

S'il n'y a pas de place pour les erreurs, utilisez plutôt un analyseur HTML. Par exemple. lorsqu'un élément est réparti sur deux lignes

<div
>Lorem ipsum</div>

cette expression régulière ne fonctionnera pas.


Cette expression régulière se compose de trois parties <, [^>]*, >

  • recherche d'ouverture <
  • suivi de zéro ou plusieurs caractères *, qui ne sont pas les derniers >
    [...] est un classe de caractères , quand il commence par ^ recherchez les caractères et non dans la classe
  • et enfin chercher la fermeture >

L'expression régulière plus simple <.*> ne fonctionnera pas, car il recherche la correspondance la plus longue possible, c'est-à-dire la dernière fermeture > dans une ligne d'entrée. Par exemple, lorsque vous avez plusieurs balises dans une ligne d'entrée

<name>Olaf</name> answers questions.

aura pour résultat

répond aux questions.

au lieu de

Olaf répond aux questions.

Voir aussi Répétition avec Star et Plus , en particulier la section Attention à la gourmandise! et suivantes, pour une explication détaillée.

59
Olaf Dietsche