Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/05/2008, à 00:43

yurek

sauvegarder une partie d'un texte avec sed

Alors j'ai trouve un truck comme
sed -n '1,/\<pre/p;/pre\>/p' fichier

mais ca me supprime la partie compris entre <pre et pre> ors je voudrais faire le contraire, ne garder que cette section comprise entre <pre et pre>

merci pour votre aide

Dernière modification par yurek (Le 25/05/2008, à 00:43)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#2 Le 25/05/2008, à 01:13

abetsic

Re : sauvegarder une partie d'un texte avec sed

Si ce que tu cherches est sur une seule ligne à chaque fois, tu peux te débrouiller avec grep, il y a une option pour n'afficher que le résultat qui correspond à ce que tu cherches (man grep pour les détails)
Sinon tu peux utiliser awk, de mémoire la syntaxe est quelque chose comme

awk '/debut/,/fin/' ton_fichier

Hors ligne

#3 Le 25/05/2008, à 01:41

yurek

Re : sauvegarder une partie d'un texte avec sed

ca donne le meme résultat !! il me faudrais la commande inverse  mais je trouve pas !

J'ai meme essayer avec

sed "s#.*\(\<pre.*\),\pre\>\(.*\)#\1\2#"

mais ca ne marche pas mieu

Dernière modification par yurek (Le 25/05/2008, à 01:42)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#4 Le 25/05/2008, à 19:20

yurek

Re : sauvegarder une partie d'un texte avec sed

up


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#5 Le 25/05/2008, à 19:53

abetsic

Re : sauvegarder une partie d'un texte avec sed

ça ne te dirais pas d'être un peu plus clair ? Si tu donnais un exemple de texte dont tu cherches à extraire une chaîne et le résultat exact attendu peut être qu'on comprendrait mieux...

(et fais un effort sur l'orthographe stp, ça fait mal aux yeux wink)

Hors ligne

#6 Le 25/05/2008, à 22:00

yurek

Re : sauvegarder une partie d'un texte avec sed

par exemple, je voudrais mettre a jour un script en téléchargeant directement la version a jour du forum ubuntu.

sachant que le script est entre la balise <pre> et </pre>, j'essaye de l'extraire de la page téléchargé.


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#7 Le 26/05/2008, à 13:52

Totor

Re : sauvegarder une partie d'un texte avec sed

Je ne sais pas si tu peux le faire en une seule fois.
mais voilà comment je procéderai :

1. récupération du numéro de ligne contentant "<pre" (awk '/<pre/ { print NR }' fichier )
2. récupération du numéro de ligne contenant "/pre>" (awk '/\/pre>/ { print NR }' fichier )
3. affichage de la ligne contenant "<pre" en remplacant "<pre" par blanc (un sed le permet)
4. affichage des lignes entre les valeurs trouvées en 1 et 2 (avec sed)
5. affichage de la ligne contenant "/pre>" sans le "/pre>" (avec sed)


-- Lucid Lynx --

Hors ligne

#8 Le 26/05/2008, à 13:58

bwana147

Re : sauvegarder une partie d'un texte avec sed

perl -nle 'if(m{<pre>}..m{</pre>}){s,.*<pre>,,;s,</pre>.*,,;print}' tonfichier

Hors ligne

#9 Le 26/05/2008, à 14:18

Alain.g

Re : sauvegarder une partie d'un texte avec sed

perl -0777ne 'print $1 while /<pre>(.*?)<\/pre>/sg'

avec if au lieu de while pour n'avoir que la première correspondance


Xubuntu Karmic !

Hors ligne

#10 Le 26/05/2008, à 14:26

bwana147

Re : sauvegarder une partie d'un texte avec sed

Joli! Je me permets de raccourcir un peu ta version (celle du while, pas du if):

perl -0777ne 'print for /<pre>(.*?)<\/pre>/sg'

Hors ligne

#11 Le 26/05/2008, à 16:24

yurek

Re : sauvegarder une partie d'un texte avec sed

merci merci, testons testons.


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#12 Le 26/05/2008, à 16:28

yurek

Re : sauvegarder une partie d'un texte avec sed

CA MAAAARRRRRRRRCCCCCCCCCCCCCHHHHHHHHHHHHHHHEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE


mille merci, maintenant le plus dur, comprendre cette commande ! Vous pouvez m'aidez ? ( en gros m'expliquer  chaque détail de chaque caractères de chaque mot ??)
Je cherche de mon coté bien sur.

Second probleme, perl permet t il de convertir les caractères html en caractère normale ?

Dernière modification par yurek (Le 26/05/2008, à 16:32)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#13 Le 26/05/2008, à 19:20

Alain.g

Re : sauvegarder une partie d'un texte avec sed

yurek a écrit :

Second probleme, perl permet t il de convertir les caractères html en caractère normale ?

oui wink
pour faire les deux d'un coup :

perl -0777ne 'use HTML::Entities; use encoding utf8; print decode_entities($1) while /<pre>(.*?)<\/pre>/sg'

Sinon je connaissais un bon lien. Je te le poste dès que je le retrouve.

Dernière modification par Alain.g (Le 26/05/2008, à 19:26)


Xubuntu Karmic !

Hors ligne

#14 Le 26/05/2008, à 19:44

yurek

Re : sauvegarder une partie d'un texte avec sed

Alain. tu est le premier a qui je dis ca : JE T'AIME


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#15 Le 26/05/2008, à 23:10

bwana147

Re : sauvegarder une partie d'un texte avec sed

yurek a écrit :

mille merci, maintenant le plus dur, comprendre cette commande ! Vous pouvez m'aidez ? ( en gros m'expliquer  chaque détail de chaque caractères de chaque mot ??)

Tout est très bien expliqué ici: http://articles.mongueurs.net/magazines/linuxmag50.html

En gros:
- -0777 signifie "lire tout le fichier d'un seul coup en mémoire, et non pas ligne par ligne"
- -l va rajouter un \n en fin de chaque ligne (après un print)
- -e signifie que l'argument suivant est du code Perl

Le code lui même:
- une expression rationnelle (/<pre>(.*?)<\/pre>) va capturer toutes les suites de caractères qui se trouvent entre <pre> et </pre>. Les modificateurs /sg à la fin signifient, pour s, que le point dans ".*?" peut correspondre à un retour-chariot (par défaut, ce n'est pas le cas), ce qui permet d'avoir des \n dans tes sections <pre>, et pour g, qu'on ne s'arrête pas à la première occurence de <pre>.*?</pre>... Voir man perlre pour les détails.
- La liste des occurences capturées par les parenthèses et itérée par la boucle for
- Et que fait la boucle for ? print ! Tout simplement.

Hors ligne

#16 Le 08/06/2009, à 21:24

hardball

Re : sauvegarder une partie d'un texte avec sed

un peu plus court

perl -0777ne 'print/<pre>(.*?)<\/pre/sg'

-- Toshiba satelliteA100-335 + Ubuntu Jaunty --
Pour les noobs : Bienvenue ! ici la perséverance vous récompense.
Pour les anciens : Merci à vous de partager votre savoir.
Et vive le perl !

Hors ligne