Sed et plus si affinités :p

Résolu
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   -  
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'aimerai faire quelques modifications de fichiers. J'ai environ 3000 pages html à modifier. J'aimerai supprimer tout ce qu'il y a à l'intérieur et garder uniquement ce qu'il y a entre <span class="classe"> et </span><br/>. Et je voudrai aussi concaténer tout ça dans un seul fichier de ce type :
<span class="classe"> texte 1 </span><br/>
<span class="classe"> texte 2 </span><br/>
<span class="classe"> texte 3 </span><br/>
Alors j'essaie de bidouiller tout ça avec la commande sed mais à dire vrai je me rend un peu fou. (Je découvre d'une certaine manière)
Si vous avez des idées, des techniques ou d'autres outils pour ce que j'aimerai faire, je suis preneur. :)
Merci à vous !!!!

27 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,
sed -ns 's§.*\(<span class="classe".*</span><br/>\).*§\1§w sortie.txt' *.html
0
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
Haha, impossible de faire un § sur Cygwin.
Sinon sur sed windows erreur :
< était inattendu

Avec :
sed -ns 's§.*\(<span class="classe".*</span>\).*§\1§w sortie.txt' *.html
(sans le <br/> dans mon cas ce n'est pas grave :p)
Erreur :
Le fichier spécifié est introuvable.

Alors là je dois admettre que je suis un peu paumé. Je ne vois pas ce qu'il ne trouve pas ...
Avec :
sed -ns 's§.*\(<span class="classe".*</span>\).*§\1§w sortie.txt' page.html
(page qui existe)
L'erreur est la même....
En créant le fichier txt avant, même erreur. Je ne sais pas ....
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

§
n'es qu'un séparateur
Choisi un autre ;-))
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
A la limite colle une page sur Cjoint qu'on y jette un œil et qu'on fasse des essais...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
Ben si sur :
<html>
<head></head>
<body>
<span>é"'(-è_çà)=^$ù*iokl,;:</span><br/>
<span class="classe">bob</span><br/>
<div>ç_&-"(àç&)"(çàè)</div>
<span class="classe">gilbert</span><br/>
<span>$^m$^lsm)=à(éè</span>
<span class="classe">norbert</span><br/>
<span>sqdsqdqdsqxc</span>
<div>xfpqozqighpin</div>
<p>$ùqm*xqfùl</p>
</body>
</html>

Si le sed donne :
<span class="classe">bob</span><br/>
<span class="classe">gilbert</span><br/>
<span class="classe">norbert</span><br/>

Ca serait le rêve. :D
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Je n'ai pas testé puisque je n'ai pas un environnement linux pour l'instant
perl -pi.orig -e 'next unless s/.*(<span class="classe">.+?</span>).*/$1/g' fichier.html

0
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
Idem, je bidouille Cygwin là :p
Et perl euuuh inconnu pour moi dsl ^^
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
[tmpfs]$ cat bkrqpzef
<html>
<head></head>
<body>
<span>é"'(-è_çà)=^$ù*iokl,;:</span><br/>
<span class="classe">bob</span><br/>
<div>ç_&-"(àç&)"(çàè)</div>
<span class="classe">gilbert</span><br/>
<span>$^m$^lsm)=à(éè</span>
<span class="classe">norbert</span><br/>
<span>sqdsqdqdsqxc</span>
<div>xfpqozqighpin</div>
<p>$ùqm*xqfùl</p>
</body>
</html>

[tmpfs]$ sed -n 's§.*\(<span class=.*</span><br/>\).*§\1§p' bkrqpzef
<span class="classe">bob</span><br/>
<span class="classe">gilbert</span><br/>
<span class="classe">norbert</span><br/>

[tmpfs]$ 
Ça c'était au cas ou il y aurait d'autres caractères ou balises avant/après, sinon en plus simple :
sed -n '\#<span class=.*</span><br/>#p' bkrqpzef
;-))
0
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
Si c'est la réponse ..... Je ne comprend pas :p
Rien ne marche. huhu
Go créer un piti txt !!!!!!!
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Installes un pingouin et ça devrait aller mieux ;-))
0
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
Pareil sur Ubuntu, ça ne marche pas. xD
Sed quand tu nous tiens !!!!
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Tu peux faire un essai avec ça et afficher le résultat s'il te plait :
[tmpfs]$ cat bkrqpzef
<html>
<head></head>
<body>
<span>é"'(-è_çà)=^$ù*iokl,;:</span><br/>
<span class="classe">bob</span><br/>
<div>ç_&-"(àç&)"(çàè)</div>
<span class="classe">gilbert</span><br/>
<span>$^m$^lsm)=à(éè</span>
<span class="classe">norbert</span><br/>
<span>sqdsqdqdsqxc</span>
<div>xfpqozqighpin</div>
<p>$ùqm*xqfùl</p>
</body>
</html>
[tmpfs]$ sed -ns '\#<span class=.*</span><br/>#p' bkrqpzef
<span class="classe">bob</span><br/>
<span class="classe">gilbert</span><br/>
<span class="classe">norbert</span><br/>
[tmpfs]$
Et dans la foulée afficher la sortie de "cat -A bkrqpzef".

Merci.
0
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
je ne comprend pas bien ce qu'il faut obtenir après un
sed -n 's§.*\(<span class=.*</span><br/>\).*§\1§p' bkrqpzef

C'est censé changer le fichier bkrqpzef ?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Dans le cas de mon exemple précédent, c'est sensé afficher ça sur la sortie standard (l'écran) :
<span class="classe">bob</span><br/>
<span class="classe">gilbert</span><br/>
<span class="classe">norbert</span><br/>
et c'est d'ailleurs ce qui s'affiche chez moi ;-))
0
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
[prompt] cat bkrqpzef
<html>
<head></head>
<body>
<span>é"'(-è_çà)=^$ù*iokl,;:</span><br/>
<span class="classe">bob</span><br/>
<div>ç_&-"(àç&)"(çàè)</div>
<span class="classe">gilbert</span><br/>
<span>$^m$^lsm)=à(éè</span>
<span class="classe">norbert</span><br/>
<span>sqdsqdqdsqxc</span>
<div>xfpqozqighpin</div>
<p>$ùqm*xqfùl</p>
</body>
</html>
[prompt] sed -ns '\#<span class=.*</span><br/>#p' bkrqpzef

[prompt]cat -A bkrqpzef
<html>
<head></head>
<body>
<span>é"'(-è_çà)=^$ù*iokl,;:</span><br/>
<span class="classe">bob</span><br/>
<div>ç_&-"(àç&)"(çàè)</div>
<span class="classe">gilbert</span><br/>
<span>$^m$^lsm)=à(éè</span>
<span class="classe">norbert</span><br/>
<span>sqdsqdqdsqxc</span>
<div>xfpqozqighpin</div>
<p>$ùqm*xqfùl</p>
</body>
</html>
0
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
Bon après le sed Cygwin, le sed de windows, le sed de Ubuntu, je go tester ça sur mandriva. :D
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Euh... il sort d'où ton fichier ? Et sous quel environnement tu es ?
Normalement un "cat -A" devrait te donner ça :
[tmpfs]$ cat -A bkrqpzef
<html>$
<head></head>$
<body>$
<span>M-i"'(-M-h_M-gM-`)=^$M-y*iokl,;:</span><br/>$
<span class="classe">bob</span><br/>$
<div>M-g_&-"(M-`M-g&)"(M-gM-`M-h)</div>$
<span class="classe">gilbert</span><br/>$
<span>$^m$^lsm)=M-`(M-iM-h</span>$
<span class="classe">norbert</span><br/>$
<span>sqdsqdqdsqxc</span>$
<div>xfpqozqighpin</div>$
<p>$M-yqm*xqfM-yl</p>$
</body>$
</html>$

Le "$" en fin de ligne, synonyme de fin de ligne sous GNU/Linux.

Essaye avec sed alors (c'est un ELLE minuscule et non pas un UN !!!) :
[tmpfs]$ sed -n l bkrqpzef
<html>$
<head></head>$
<body>$
<span>\351"'(-\350_\347\340)=^$\371*iokl,;:</span><br/>$
<span class="classe">bob</span><br/>$
<div>\347_&-"(\340\347&)"(\347\340\350)</div>$
<span class="classe">gilbert</span><br/>$
<span>$^m$^lsm)=\340(\351\350</span>$
<span class="classe">norbert</span><br/>$
<span>sqdsqdqdsqxc</span>$
<div>xfpqozqighpin</div>$
<p>$\371qm*xqf\371l</p>$
</body>$
</html>$
[tmpfs]$
0
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
Désolé pour le "copier-coller" qui n'en était pas un ^^
Il y a effectivement un ^M$ à la fin de chaque ligne du cat. (Cygwin)
Et
sed -n l bkrqpzef
affiche un $.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
sed -n l bkrqpzef affiche un $.
\r$ plutôt non ?

Bon j'ai changé mes "$" en "^M" et ça marche quand même ;-\
[tmpfs]$ cat -A bkrqpzef
<html>^M$
<head></head>^M$
<body>^M$
<span>M-i"'(-M-h_M-gM-`)=^$M-y*iokl,;:</span><br/>^M$
<span class="classe">bob</span><br/>^M$
<div>M-g_&-"(M-`M-g&)"(M-gM-`M-h)</div>^M$
<span class="classe">gilbert</span><br/>^M$
<span>$^m$^lsm)=M-`(M-iM-h</span>^M$
<span class="classe">norbert</span><br/>^M$
<span>sqdsqdqdsqxc</span>^M$
<div>xfpqozqighpin</div>^M$
<p>$M-yqm*xqfM-yl</p>^M$
</body>^M$
</html>^M$

[tmpfs]$ sed -n '\#<span class=.*</span><br/>#p' bkrqpzef
<span class="classe">bob</span><br/>
<span class="classe">gilbert</span><br/>
<span class="classe">norbert</span><br/>
[tmpfs]$
Je comprends plus rien ;-(((
0
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
Pareil sur Mandriva 2009. Bon là je suis à court de compréhension.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Colle ton fichier sur Cjoint s'teuplé ;-)
0
bkrqpzef Messages postés 197 Date d'inscription   Statut Membre Dernière intervention   5
 
Comment
sed -n '\#<span class=.*</span><br/>#p' bkrqpzef
peut afficher quelque chose chez toi ? :p
Ca ne fait rien sous Ubuntu/Cygwin/Mandriva. Juste rien. :)
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
C'est justement ce que j'aimerai savoir, d'où ma demande pour avoir le fichier sur lequel ça ne marche pas ;-\
0