9
votes

Supprimer les balises de commentaire HTML à l'aide de Regex

cat file.html | sed 's/.*<!--\(.*\)-->.*//g'

4 commentaires

Peut-être: / /


@jnpcl: Cela ressemble à Perl. Il ne fonctionnera pas dans sed .


Des avertissements habituels s'appliquent.


@Dennis: C'est ce qui a fonctionné pour moi avec Regexpal , je n'ai pas réalisé que sed utilisé une syntaxe différente pour des expressions régulières.


3 Réponses :


3
votes

Je pense que vous pouvez le faire avec awk si vous voulez. Démarrer: xxx

résultat du awk : xxx


1 commentaires

Supprime par exemple la ligne entière suivante. Pas jus the commentaire:



9
votes

Un problème avec votre tentative initiale est que votre regex ne traite que des commentaires entièrement sur une ligne. En outre, le principal et la trail ". *" Supprimera le texte non-commentaire.

Vous feriez mieux d'utiliser le code existant au lieu de rouler le vôtre.

http://sed.sourceforge.net/grabbag/scripts/ strip_html_comments.sed xxx

(de http://sed.sourceforge.net/grabbag/scripts/ )

Voir ce lien de différentes manières d'utiliser des modules Perl pour supprimer les commentaires HTML (à l'aide de RegExP :: Common, HTML :: Analyseur, ou fichier :: comments.) Je suis sûr qu'il existe des méthodes utilisant d'autres utilitaires.

http://www.perlmonks.org/?node_id=500603


0 commentaires

13
votes

PatrickMdnet a la bonne réponse. Ici, il est sur une ligne à l'aide d'une expulsion étendue:

cat file.html | sed -e :a -re 's/<!--.*?-->//g;/<!--/N;//ba'


4 commentaires

Merci Brian! Vous êtes génial :) Qu'est-ce que le: une moyenne dans votre commande sed?


Cela crée une étiquette de branche nommée 'A'. Le '// BA' à la fin est ramifiant à 'A'.


Est le // avant BA nécessaire? Je n'en ai pas besoin dans gnu sed .


La double barre oblique est courte pour l'expression précédente (qui est /