supprimer balises html [bash] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 10-05-2007 à 11:37:46
C'est pas si con que ça...
Le probleme c'est que mon fichier fait 20Mo et que j'ai un pc pourri
Merci quand meme
Marsh Posté le 10-05-2007 à 11:38:32
Tu peux utiliser l'outils "sed" par exemple qui va lire toutes tes ligne de ton fichiers une par une, et en utilisant une expression régulière tu pourra supprimer ta balise.
Mais cela va te poser 2 problème:
-il va te faloir spécifier tout les type de balise html qui tu veux enlever (ça dans tout les cas tu risque d'être obliger de le faire, a moins d'avoir une liste des balises html qui existe)
-ça ne te suprimera que les balise et pas ce qui se trouve entre le balise d'ouveture et celle de fermeture
Marsh Posté le 10-05-2007 à 11:54:38
Tu peux utiliser perl sinon, il propose des modules qui permettent de parser du html et de te le retranscrire en texte pur. J'ai jamais utilisé, mais je sais que ça existe
Marsh Posté le 10-05-2007 à 11:59:16
tchouvince a écrit : Voila, tout est dans le titre: J'ai un fichier text dans lequel je voudrais supprimer toutes les balises html et ce qu'il y' a dans ces balises. Merci beaucoup d'avance |
Tu es sûr que tu veux supprimer ce qu'il y a dedans ? Ou garder ce qu'il y a dedans (bref "débaliser" ) ?
Dans le doute voici une solution pour tout virer, mais plus fine que de zapper <html>blabla</html> parce que je pense (à tort ?) que tu veux débaliser... Bref je prépare le terrain.
vim fichier.txt |
on va chercher tout ce qui est de la forme <toto>blabla</toto> et le virer
dans vim ca revient à taper
:%s;truc;remplaçant;gc |
(gc pour global (partout) et confirmation)
bref nous ca sera :
:%s;truc;;gc |
vu qu'on veut supprimer
en détail ce qu'on cherche c'est (en rouge la version regexp) :
<
<
suivi de :un nom de balise, n'importe quoi sauf > en fait
[^>]*
suivi de : >
>
suivi de : n'importe quoi sauf <
[^<]*
suivi de : <
<
suivi de : /
/
suivi de : le même nom que la première balise (attention si elle avait des attributs genre <toto id="xxx"> faut que toto)
un peu subtil, voire plus bas
suivi de : >
>
*Plus bas c'est ici
en fait la première balise on va considérer que c'est non pas comme écrit plus haut :
<[^>]*>
mais plutôt :
<
<
suivi de : n'importe quoi qui n'est pas un espace (comme ca dans <toto id="xxx"> on capte le que le toto)
[^ ]*
suivi de : n'importe quoi qui n'est pas >
[^>]*
suivi de : >
>
Du coup on peut mettre des parenthèses autour du morceau qui choppe le toto, pour le sauvegarder et s'en servir au moment où on cherchera la balise fermante.
Donc à la louche je ferai un :
:%s;<\([^ ]*\)[^>]*>[^<]*</\1>;;gc |
\1 rappelant le truc choppé par ce qui est entre parenthèse
A tester
Marsh Posté le 10-05-2007 à 12:03:53
Pour toutes les solutions à base de scripts, il faut faire vraiment attention à ce que le HTML présent dans ton fichier soit bien construit. Sinon, tu risques d'obtenir n'importe quoi, par exemple si des balises ouvertes ne sont pas fermées, ou en cas de mauvais "nesting" des balises (désolé je sais pas comment on dit en français), etc.
Marsh Posté le 10-05-2007 à 12:12:45
franceso a écrit : Pour toutes les solutions à base de scripts, il faut faire vraiment attention à ce que le HTML présent dans ton fichier soit bien construit. Sinon, tu risques d'obtenir n'importe quoi, par exemple si des balises ouvertes ne sont pas fermées, ou en cas de mauvais "nesting" des balises (désolé je sais pas comment on dit en français), etc. |
Ah oué t'as raison, en fait si mon truc marche ca ne sera que pour du xml (xhtml ca passe)
Ou alors on cherche juste <html>.*</html> et on delete
Marsh Posté le 10-05-2007 à 12:44:00
D'façon, le html kipu et qui est mal formatté, ça mérite pas d'être nettoyé
Marsh Posté le 10-05-2007 à 12:55:43
franceso a écrit : Pour toutes les solutions à base de scripts, il faut faire vraiment attention à ce que le HTML présent dans ton fichier soit bien construit. Sinon, tu risques d'obtenir n'importe quoi, par exemple si des balises ouvertes ne sont pas fermées, ou en cas de mauvais "nesting" des balises (désolé je sais pas comment on dit en français), etc. |
Imbrication
Marsh Posté le 10-05-2007 à 13:55:31
ReplyMarsh Posté le 10-05-2007 à 14:02:12
Je suis d'accord avec Xavier_OM pour sa dans vim seulement ça ne va pas marcher avec les balises unique genre "<br />" ou <img ... /> ??
Ou est ce que je dit une connerie?
Marsh Posté le 10-05-2007 à 14:05:22
electro86 a écrit : Je suis d'accord avec Xavier_OM pour sa dans vim seulement ça ne va pas marcher avec les balises unique genre "<br />" ou <img ... /> ?? |
euh non en effet, les balises autofermantes vont rester faudra les traiter aussi
et pis ya aussi les balises genre <input>, pas forcément fermées
et pis de tout façon en html (le vrai le moche ) on peut faire de la merde genre <b><i>toto</b></i>
Bref parser du html c'est bon pour la team mozilla
Marsh Posté le 10-05-2007 à 14:10:46
[quote=Xavier_OM]
Bref parser du html c'est bon pour la team mozilla :[/quote]
J'approuve !!!
Marsh Posté le 10-05-2007 à 14:48:21
+1
Le seul salut possible, c'est d'utiliser du XHTML et un parser de XML.
Sinon, je pense que la seule solution est d'utiliser l'aide d'un bon éditeur de texte pour repérer les balises cherchées, et de tout contrôler à la main.
Marsh Posté le 10-05-2007 à 14:58:38
Oui mais si il sagit d'un fichier de 20 mo... ça doit faire un paquet de ligne donc je ne sais pas si à la main ca va pas lui prendre 10 ans!
Marsh Posté le 10-05-2007 à 15:02:34
ReplyMarsh Posté le 10-05-2007 à 15:11:43
Pour transformer du html pourri en xhtml, il y a tidy.
Marsh Posté le 10-05-2007 à 15:25:51
Code :
|
Un début peut être.
Marsh Posté le 11-05-2007 à 12:18:07
lynx -dump t'interprétera le hachetemeuleu et écrira du texte, à voir.
Marsh Posté le 11-05-2007 à 13:15:15
tchouvince a écrit : |
Mjules a écrit : lynx -dump t'interprétera le hachetemeuleu et écrira du texte, à voir. |
C'est ce que j'avais écris puis effacer puisqu'en fait ca correspond pas à la demande.
Marsh Posté le 14-05-2007 à 10:37:02
Si c'est pour les balises _et_ ce qu'il y a dedans...
mv tonfichier /dev/null
touch tonfichier
mais bon... j'vois pas l'utilité
Pour supprimer uniquement les balises, pourquoi ne pas simplement supprimer les caractères situés entre un < et un > !? (sauf s'il y a de ça dans le texte, hors balises)
Marsh Posté le 14-05-2007 à 10:48:02
Je vois pas ce que vous avez contre mon bout de php. C'est surement bcp plus efficace qu'une regex.
Marsh Posté le 06-09-2007 à 17:51:10
C'est juste que ça ne fait pas ce qui est demandé et n'est pas facilement transformable en quelque chose qui fait ce qui est demandé.
Mais sinon, on n'a rien contre ton script et il est assez efficace pour faire ce qu'il fait.
Marsh Posté le 10-05-2007 à 11:27:48
Voila, tout est dans le titre:
J'ai un fichier text dans lequel je voudrais supprimer toutes les balises html et ce qu'il y' a dans ces balises.
Merci beaucoup d'avance