[Script shell, SED]Html et balise script sur plusieurs lignes

Html et balise script sur plusieurs lignes [Script shell, SED] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 20-10-2004 à 14:55:49    

Bonjour,
 
j'essaie de virer d'un fichier html toutes les balises scripts.
 
genre cette bouillie la :  
 

Code :
  1. <script language="Javascript" src="/javascript/blocs/bloc_soc/e/eds.js"></script><script language="Javascript" src="/javascript/blocs/bloc_key/informatique.js"></script><script language="Javascript" src="/javascript/blocs/legende.js"></script><br><center><script language="JavaScript">
  2. OAS_AD('Right1');
  3. </script></center>


 
j'en veux plus...
 
donc j'essaie ca :  
sed -e 's@\<script[ \t\n.]*\</script\>@ @g' toto.html > plusDeScript.tmp
 
mais ca marche pô... les blocs de scripts sont intact...
 
qqn pourrait m'aider??
 
Paquerette


Message édité par paquerette le 20-10-2004 à 14:59:57
Reply

Marsh Posté le 20-10-2004 à 14:55:49   

Reply

Marsh Posté le 20-10-2004 à 16:06:40    

À l'arrache

cat plop.txt | sed -e 's/<script[^>]*>//g' | sed -e 's/<\/script>//g'


Message édité par bobuse le 20-10-2004 à 16:09:19
Reply

Marsh Posté le 20-10-2004 à 16:12:10    

ca marche bien sur les <script /script> qui sont sur la meme ligne mais pas sur qqch comme ca:
 
<script language="Javascript">
 
var ADV_sitepage="www.toto.com/jdj/exemple.htm";
 
var ADV_listpos="Top1,x01,Top,Bottom,Left,Left2,Right,Right1";
var ADV_qcod="_US2856611049_";
var ADV_qsec="_technologies_de_l_information_";
var ADV_qkey="_informatique_";
var ADV_qcom="_eds_";
var ADV_qgeo="_monde_";
</script>
 
j'ai essayer ca :
 
 cat tmp.tmp  | sed -e 's/<script[^>]*>[. \t\n]*//g' | sed -e 's/<\/script>//g' > result
 
mais ca marche pas plus...


Message édité par paquerette le 20-10-2004 à 16:41:30
Reply

Marsh Posté le 20-10-2004 à 16:31:46    

La http://pegasus.rutgers.edu/~elflord/unix/sed.html
il parle de matcher des patterns sur plusieurs lignes, mais je capte que dalle...


Message édité par paquerette le 20-10-2004 à 16:31:58
Reply

Marsh Posté le 20-10-2004 à 16:33:34    

ha ok, tu veux enlever ce qu'il y a entre les balises AUSSI ! J'avais mal compris dsl ...

Reply

Marsh Posté le 20-10-2004 à 16:35:58    

y'a pas de mal ;)

Reply

Marsh Posté le 20-10-2004 à 16:55:56    

par je suis toujours coincé

Reply

Marsh Posté le 20-10-2004 à 17:06:24    

cat tmp.tmp | sed  -e '/<script/,/<\/script>/ s/.*//'
 
avec ca, j'arrive presque a ce que je veux sauf que ca me vire bcp trop de truc...
 
j'essaie de faire faire a sed :  entre <script et </script> vire tout... le pb c'est que j'ai pas l'impression qu'il trouve la fin </script>...

Reply

Marsh Posté le 20-10-2004 à 17:18:06    

/\(<script\).*\(script\)/d
 
ca marche pas un truc ds le genre ?


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 20-10-2004 à 17:23:46    

nan, ca vire le premier <script, mais pas le dernier, ni le contenu de la balise...
 
c bete, je comprends pas pkoi il s'arrete pas sur la derniere balise avec ca :
 
cat tmp.tmp | sed  -e '/<script/,/<\/script>/ s/.*//'

Reply

Marsh Posté le 20-10-2004 à 17:23:46   

Reply

Marsh Posté le 20-10-2004 à 20:12:46    

post inutile.


Message édité par void_ppc le 21-10-2004 à 16:26:49
Reply

Marsh Posté le 21-10-2004 à 09:41:33    

Génial.... je suis vachement avancé dans mon pb  :na:


Message édité par paquerette le 21-10-2004 à 10:38:05
Reply

Marsh Posté le 21-10-2004 à 10:42:53    

paquerette a écrit :

nan, ca vire le premier <script, mais pas le dernier, ni le contenu de la balise...
 
c bete, je comprends pas pkoi il s'arrete pas sur la derniere balise avec ca :
 
cat tmp.tmp | sed  -e '/<script/,/<\/script>/ s/.*//'


 
 
Je viens de comprendre... sed match au plus large
par exemple :  
<script>
</script>
text
<script>
</script>
text
<script>
</script>
 
il va prendre la zone du premier script au dernier /script et pas 3 fois les <script> </script>
 
Damned, ca m'arrange pas ca...

Reply

Marsh Posté le 22-10-2004 à 10:34:57    

Personne pour m'aider :'(

Reply

Marsh Posté le 22-10-2004 à 13:31:01    

paquerette a écrit :

Personne pour m'aider :'(


 
Peux tu me donner le résultat que tu voudrais avoir ???
Que je sache exactement ce que tu veux.

Reply

Marsh Posté le 25-10-2004 à 12:18:46    

De ca :
 


 
<head>
<title>titre</title>
<noscript>soustitre</noscript>
 
<META NAME="KEYWORDS" CONTENT="informatique, monde, eds">
<META NAME="DESCRIPTION" lang="fr" CONTENT="">
<META http-equiv="Content-type" CONTENT="text/html; charset=iso-8859-1" />
<META http-equiv="pragma" CONTENT="no-cache">
<META NAME="AUTHOR" CONTENT="Les Echos">
<META NAME="moteur_rubrique" CONTENT="technologies_de_l_information/">
<META NAME="moteur_date" CONTENT="20041019">
 
 
<script language="Javascript">
 
var ADV_sitepage="www.toto.com/page.htm";
 
var ADV_listpos="Top1,x01,Top,Bottom,Left,Left2,Right,Right1";
var ADV_qcod="_US2856611049_";
var ADV_qsec="_technologies_de_l_information_";
var ADV_qkey="_informatique_";
var ADV_qcom="_eds_";
var ADV_qgeo="_monde_";
</script>
 
<script src="/javascript/scripts.js" language="JavaScript"></script>
<script src="/javascript/bandeau/bandeau.dyn.js" language="JavaScript"></script>
<script src="/javascript/realmedia.js" language="JavaScript"></script>
 
 
 
 
<!-- file/skul/edition/general.sk -->
</head>
<HEADMY>
<div class="D-DRO-ART"><div class="CENT-TOP-ENTREPRISES" style="margin-bottom: 0px"><span class="CENT-TEXT">Dossier entreprise</span></div><div style="border-bottom: 1px solid #FFAA00"><span class="MC-TEXT"><a class="MC-TEXT" style="color:red;" href="/eds.htm">EDS</a></span><br></div><br><!--BOURSE--><div class="CENT-TOP-BOURSE" style="margin-bottom:0px;"><span class="CENT-BOURSE">Le cours a la Bourse</span></div><div style="magin-bottom: 10px"><script language="Javascript" src="/javascript/blocs/bloc_bourse/e/eds.js"></script></div><br><script language="Javascript">
        var exclure_art = new Array();
        exclure_art[4173736] = 1;
</script><script language="Javascript" src="/javascript/blocs/bloc_soc/e/eds.js"></script><script language="Javascript" src="/javascript/blocs/bloc_key/informatique.js"></script><script language="Javascript" src="/javascript/blocs/legende.js"></script><br><center><script language="JavaScript">
OAS_AD('Right1');
</script></center></div><div class="ART-TIT"> Some Text here.</div><br><br><br>
</HEADMY>


 
je voudrais passer a ca :  
 


<head>
<title>titre</title>
<noscript>soustitre</noscript>
 
<META NAME="KEYWORDS" CONTENT="informatique, monde, eds">
<META NAME="DESCRIPTION" lang="fr" CONTENT="">
<META http-equiv="Content-type" CONTENT="text/html; charset=iso-8859-1" />
<META http-equiv="pragma" CONTENT="no-cache">
<META NAME="AUTHOR" CONTENT="Les Echos">
<META NAME="moteur_rubrique" CONTENT="technologies_de_l_information/">
<META NAME="moteur_date" CONTENT="20041019">
<!-- file/skul/edition/general.sk -->
</head>
<HEADMY>
<div class="D-DRO-ART"><div class="CENT-TOP-ENTREPRISES" style="margin-bottom: 0px"><span class="CENT-TEXT">Dossier entreprise</span></div><div style="border-bottom: 1px solid #FFAA00"><span class="MC-TEXT"><a class="MC-TEXT" style="color:red;" href="/eds.htm">EDS</a></span><br></div><br><!--BOURSE--><div class="CENT-TOP-BOURSE" style="margin-bottom:0px;"><span class="CENT-BOURSE">Le cours a la Bourse</span></div><div style="magin-bottom: 10px"></div><br><br><center></center></div><div class="ART-TIT"> Some Text here.</div><br><br><br>
</HEADMY>


 
Soit en gros, virer tout ce qui est contenu entre chaque <script...></script>
 

Reply

Marsh Posté le 27-10-2004 à 11:29:03    

:'( personne ne m'aime... :D


Message édité par paquerette le 27-10-2004 à 11:29:22
Reply

Marsh Posté le 07-12-2004 à 19:58:12    

paquerette a écrit :

:'( personne ne m'aime... :D


 
Ce sujet est toujours d'actualité ?
...Je reflechis la dessus ce soir, sed est ma commande favorite  :love:  
Demain tu as la reponse !

Reply

Marsh Posté le 08-12-2004 à 03:02:26    

En 2 heures rien qu'avec le man de sed et sans rien y connaitre :

sed ':x;s/<script.*<\/script>//g;N;bx'


C'est trop fort sed :love:
Bon c'est surement pas parfait, mais ça devrait te permettre de démarrer.

Reply

Marsh Posté le 08-12-2004 à 12:56:44    

Aller les enfants fini de faire mumuse avec sed, paquerette j'ai la réponse à ton probleme :
 
Alors suit moi bien, tout se fait en 3 étapes :
 
1) cree un fichier ~/script1er.sed et copie dedans le code suivant :
 


#
# script1er.sed : ce script a executer en 1er permet de supprimer les scripts
# contenu entierement sur une meme ligne
#
 
#lecture d'une ligne L
/^.*$/{
 :case_depart
 #L contient un script S contenu entierement dans la ligne
 /^.*<script.*<\/script>.*$/{
  #effacement du script
  s/^\(.*\)<script.*<\/script>\(.*\)$/\1\2/
  #retour a la case depart
  b case_depart
 }
 #L ne contient pas de script contenu entierement dans la ligne
 /^.*<script.*<\/script>.*$/!{
  #on affiche L
  p
 }
}
 


 
2) cree un fichier ~/script2eme.sed et copie dedans le code suivant :
 


#
# script2eme.sed : ce script a executer en 2eme permet de supprimer les scripts
# sur plusieurs lignes
#
 
#lecture d'une ligne L
/^.*$/{
 #L contient un debut de script
 /^.*<script.*$/{
  :continuer_concatenation
  #L ne contient pas de script entier
  /^.*<script.*<\/script>.*$/!{
   #concatenation de L avec la ligne suivante pour former une nouvelle ligne L (le caractere \n apparait)
   N
   #retour a la case depart
   b continuer_concatenation
  }
  #L contient un script entier
  /^.*<script.*<\/script>.*$/{
   #L contient en plus le debut du script suivant
   /^.*<script.*<\/script>.*<script.*$/{
    #effacement du script
    s/^\(.*\)<script.*<\/script>\(.*\)$/\1\2/
    b continuer_concatenation
   }
   #effacement du script
   /^.*<script.*<\/script>.*$/{
    s/^\(.*\)<script.*<\/script>\(.*\)$/\1\2/
   }
  }
 }
 #on affiche la ligne
 p
}
 


 
3)il ne te reste plus qu'a executer la commande suivante (remplace ~/src par le chemin a ton fichier html):
 


commande > sed -nf ~/script1er.sed ~/src > ~/resultat; sed -i -nf ~/script2eme.sed ~/resultat


 
 
A l'issue de l'etape 3 tu obtiendras un fichier ~/resultat qui contient ce que tu voulais ;).
 
Rq : - ce code ne marche pas pour des scripts dans des scripts (dans un 1er tps...demander si necessaire :D)
 
et voila, ce fut un plaisir, sed c'est bien, mangez en [:vroom]

Reply

Marsh Posté le 08-12-2004 à 19:08:09    

Ils font quoi de plus que ma commande d'une ligne tes scripts ?

Reply

Marsh Posté le 09-12-2004 à 00:11:49    

lol

Reply

Marsh Posté le 09-12-2004 à 11:25:30    

matafan a écrit :

Ils font quoi de plus que ma commande d'une ligne tes scripts ?


 
tu l'a testé ton script sur son exemple ?  :heink:

Reply

Marsh Posté le 09-12-2004 à 12:30:48    

Ça manque de "i" tout ces "s" :)
 
Maitenant étape 2 : gérer les commentaires.
Ex:
 
<script>
<!--
</script>
hé oui, la ca va tout planter !
-->
</script>

Reply

Marsh Posté le 09-12-2004 à 12:33:09    

Giz a écrit :

tu l'a testé ton script sur son exemple ?  :heink:


 
Chez moi il marche son script :o

Reply

Marsh Posté le 09-12-2004 à 14:47:04    

"Chez moi ça marche" © aussi :D

Reply

Marsh Posté le 09-12-2004 à 16:01:16    

ArSuniK a écrit :

Chez moi il marche son script :o


 
Perdu, dommage ;) ! (j'ai essaié chez moi aussi :D)
tiens essaie le avec ca :
 


a<script ...>i</script>b<script ...>j</script>c<script ...>k</script>
d<script ...>
o
z</script>e<script ...>m z
</script>f<script ...>n</script>
 
g<script ...>o</script>
 
h<script ...>
p</script>i<script ...>
 
q</script>
j
 
<script ...>r
y
t</script>
 
k
<script ...>s
</script>
l


 
Si le script marche, il te renvoie uniquement l'alphabet [a-l] (de a à l, bornes comprises et chaque lettre apparaissant une seule fois) sur l'ecran...si tu as d'autres lettres qui apparaissent ou bien que tu n'as pas toutes les lettres de a à l, il merde ;)
 
Bon test !  :)
 
EDIT : et dans ton script, tu fais l'affichage où de ton "pattern space" ?  :heink: pour avoir le résultat


Message édité par Giz le 09-12-2004 à 16:15:25
Reply

Marsh Posté le 09-12-2004 à 16:19:16    

ArSuniK a écrit :

Ça manque de "i" tout ces "s" :)
 
Maitenant étape 2 : gérer les commentaires.
Ex:
 
<script>
<!--
</script>
hé oui, la ca va tout planter !
-->
</script>


 
paquerette n'a pas demande de gerer les commentaires :o

Reply

Marsh Posté le 09-12-2004 à 21:02:48    

Ya pas moyen de faire de faire des match "au plus court" (me souvient plus de la dénomination exacte) en sed ?

Reply

Marsh Posté le 10-12-2004 à 04:20:08    

Apparement non, c'est ce qui m'a perdu :(
 
Bref ça prouve bien la superiorité de Perl :D  

perl -pe 'BEGIN{$/=""}s/<script[ >].*?<\/script>?//gms'


Message édité par matafan le 10-12-2004 à 04:59:03
Reply

Marsh Posté le 10-12-2004 à 10:50:41    

ArSuniK a écrit :

Ya pas moyen de faire de faire des match "au plus court" (me souvient plus de la dénomination exacte) en sed ?


 
Tu remarqueras que les match "au plus court" se font dans ma "boucle" en fait dans mon 'script1er.sed' : en fait je supprime a chaque le dernier script dans la ligne => plus de problème du match !

Reply

Marsh Posté le 10-12-2004 à 11:37:52    

matafan a écrit :


 
Bref ça prouve bien la superiorité de Perl :D  

perl -pe 'BEGIN{$/=""}s/<script[ >].*?<\/script>?//gms'




 
Il manque juste le ".*?" en sed.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed