#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 )
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
Second probleme, perl permet t il de convertir les caractères html en caractère normale ?
oui
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
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