Extraire chaine dun fichie.html en Bash
Fermé
manfire
Messages postés
4
Date d'inscription
jeudi 28 janvier 2010
Statut
Membre
Dernière intervention
13 mai 2010
-
28 janv. 2010 à 02:07
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 31 janv. 2010 à 14:55
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 31 janv. 2010 à 14:55
A voir également:
- Extraire chaine dun fichie.html en Bash
- Extraire une video youtube - Guide
- Extraire le son d'une vidéo - Guide
- Chaine tnt gratuite sur mobile - Guide
- Extraire image pdf - Guide
- Chaine radio - Télécharger - Médias et Actualité
4 réponses
jivef
Messages postés
927
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
12 novembre 2020
306
28 janv. 2010 à 04:47
28 janv. 2010 à 04:47
Bonjour,
En gros, il te faudra utiliser les expressions régulière en ajoutant ; avant ou après <...> et en excluant les morceaux de chaine "<.*>"
Cela dit, comme on ne sait pas dans quel cadre cette demande est faite, je précise que nous aimons aider les étudiants à trouver des solutions à leur problème eux-même, quitte à les aiguiller un peu en les mettant sur la voix.
Montre nous déjà ce que tu as fait et nous t'aiderons.
A plus.
En gros, il te faudra utiliser les expressions régulière en ajoutant ; avant ou après <...> et en excluant les morceaux de chaine "<.*>"
Cela dit, comme on ne sait pas dans quel cadre cette demande est faite, je précise que nous aimons aider les étudiants à trouver des solutions à leur problème eux-même, quitte à les aiguiller un peu en les mettant sur la voix.
Montre nous déjà ce que tu as fait et nous t'aiderons.
A plus.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
30 janv. 2010 à 08:39
30 janv. 2010 à 08:39
Salut,
;-))
[tmpfs]$ cat plop <div class="infosPermanentes"><p class="Idclient">284936</p><h2 class="nomclient">La Croix </h2><address class="adresseClient">20 rue Georges Bouttie - 72000 Le Mans </address><h3 class="activiteclient">Activités : triperie </h3></div> SOLUTION 1 : [tmpfs]$ grep -o ">[^<]*<" plop | sed '/^></d;s/>\|<//g;s/.*: //'| sed '/^$/d'|sed ':z;N;$!bz;s/\n/;/g;s/ - /;/;s/;[[:digit:]]\{5\}/&;/' 284936;La Croix ;20 rue Georges Bouttie;72000; Le Mans ;triperie SOLUTION 2 : [tmpfs]$ w3m -dump -T text/html plop|sed '/^$/d' |sed 's/.*: //'|sed ':z;N;$!bz;s/\n/;/g;s/ - /;/;s/;[[:digit:]]\{5\}/&;/' 284936;La Croix;20 rue Georges Bouttie;72000; Le Mans;triperie [tmpfs]$
;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
30 janv. 2010 à 08:56
30 janv. 2010 à 08:56
Salut,
Je me trompe où tout est sur une seule ligne?
Je me trompe où tout est sur une seule ligne?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
30 janv. 2010 à 10:01
30 janv. 2010 à 10:01
Salut,
Ben je fais avec ce que j'ai ;-\
Ben je fais avec ce que j'ai ;-\
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
30 janv. 2010 à 10:05
30 janv. 2010 à 10:05
Re,
;-)
J'espère qu'on ne verras pas le message "En fait je me suis mal exprimé. Mon fichier contient ..... et ça ne marche pas la commande" ;-(
;-)
J'espère qu'on ne verras pas le message "En fait je me suis mal exprimé. Mon fichier contient ..... et ça ne marche pas la commande" ;-(
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
30 janv. 2010 à 10:11
30 janv. 2010 à 10:11
Ben à coup sûr qu'on va y avoir droit ;-((
Il n'aura qu'à adapter, il a assez d'exemples fournis pour s'en sortir ;-))
PS. T'as déjà entendu parler de "s2p" (sed-to-Perl translator) ou "a2p" (Traduteur de commande Awk à Perl) ? J'ai trouvé ça en regardant le man page de Perl ;-\
Il n'aura qu'à adapter, il a assez d'exemples fournis pour s'en sortir ;-))
PS. T'as déjà entendu parler de "s2p" (sed-to-Perl translator) ou "a2p" (Traduteur de commande Awk à Perl) ? J'ai trouvé ça en regardant le man page de Perl ;-\
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
30 janv. 2010 à 10:37
30 janv. 2010 à 10:37
Re,
Oui, j'ai déjà testé a2p mais le code est très bavard et je n'ai pas aimé, avec ma paresse tu comprends ;-)
En fait il y la possibilité de le faire directement en ligne de commande en utilisant le tableau spécial @F a l'instar de la commande awk
En fait perl avec l'option -a fait un split de la ligne selon le /motif/ donné par -F dans @F
Ce qui fait que une commande awk peut être facilement traduite en perl directement ;-) il faut juste tenir compte des variables avec sigil et que les champs sont dans un tableau.
Un exemple
Ou si tu te rappelles ta solution avec awk
Oui, j'ai déjà testé a2p mais le code est très bavard et je n'ai pas aimé, avec ma paresse tu comprends ;-)
En fait il y la possibilité de le faire directement en ligne de commande en utilisant le tableau spécial @F a l'instar de la commande awk
En fait perl avec l'option -a fait un split de la ligne selon le /motif/ donné par -F dans @F
Ce qui fait que une commande awk peut être facilement traduite en perl directement ;-) il faut juste tenir compte des variables avec sigil et que les champs sont dans un tableau.
Un exemple
:~$ awk -F":" '/lami/ {print "Home:" $6 " Shell: " $7}' </etc/passwd Home:/home/lami20j Shell: /bin/bash Home:/home/lamitest Shell: /bin/bash Home:/home/lamirssh Shell: /usr/bin/rssh :~$ perl -aF -ne 'print "Home: $F[5] Shell: $F[6]" if /lami/' </etc/passwd Home: /home/lami20j Shell: /bin/bash Home: /home/lamitest Shell: /bin/bash Home: /home/lamirssh Shell: /usr/bin/rssh
Ou si tu te rappelles ta solution avec awk
~$ df -h | awk '{NR != 1; SUM+=$5} END {print SUM}' 167 ~$ df -h | perl -aF"/\s+/" -ne '$SUM+=$F[4];END{print "$SUM\n"}' 167
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
30 janv. 2010 à 10:02
30 janv. 2010 à 10:02
Re,
D'autres possibilités
S'il y a un seule enregistrement dans le fichier
S'il y a un seul enregistrement mais réparti sur plusieurs ligne
S'il y a plusieurs enregistrements sur plusieurs lignes
Solution générique (à condition que les enregistrements sont entre les balises <div et </div )
D'autres possibilités
S'il y a un seule enregistrement dans le fichier
$ cat plop1 <div class="infosPermanentes"><p class="Idclient">284936</p><h2 class="nomclient">La Croix </h2><address class="adresseClient">20 rue Georges Bouttie - 72000 Le Mans </address><h3 class="activiteclient">Activités : triperie </h3></div> $ sed 's/<[^>]*>/;/g;s/ *;; */;/g;s/^;//;s/;$//;s/ *- \([0-9]\{5\}\) /;\1;/;s/;[^;]*: /;/' plop1 284936;La Croix;20 rue Georges Bouttie;72000;Le Mans;triperie
S'il y a un seul enregistrement mais réparti sur plusieurs ligne
$ cat plop2 <div class="infosPermanentes"> <p class="Idclient">284936</p> <h2 class="nomclient">La Croix </h2> <address class="adresseClient">20 rue Georges Bouttie - 72000 Le Mans </address> <h3 class="activiteclient">Activités : triperie </h3> </div> $ sed ':z;N;$!bz;s/\n//g;s/<[^>]*>/;/g;s/ *;; */;/g;s/^;//;s/;$//;s/ *- \([0-9]\{5\}\) /;\1;/;s/;[^;]*: /;/' plop2 284936;La Croix;20 rue Georges Bouttie;72000;Le Mans;triperie
S'il y a plusieurs enregistrements sur plusieurs lignes
$ cat plop3 <div class="infosPermanentes"> <p class="Idclient">284936</p> <h2 class="nomclient">La Croix </h2> <address class="adresseClient">20 rue Georges Bouttie - 72000 Le Mans </address> <h3 class="activiteclient">Activités : triperie </h3> </div> <div class="infosPermanentes"> <p class="Idclient">284936</p> <h2 class="nomclient">La Croix </h2> <address class="adresseClient">20 rue Georges Bouttie - 72000 Le Mans </address> <h3 class="activiteclient">Activités : triperie </h3> </div> <div class="infosPermanentes"> <p class="Idclient">284936</p> <h2 class="nomclient">La Croix </h2> <address class="adresseClient">20 rue Georges Bouttie - 72000 Le Mans </address> <h3 class="activiteclient">Activités : triperie </h3> </div> $ sed ':z;N;/<\/div/! bz;s/\n//g;s/<[^>]*>/;/g;s/ *;; */;/g;s/^;//;s/;$//;s/ *- \([0-9]\{5\}\) /;\1;/;s/;[^;]*: /;/' plop3 284936;La Croix;20 rue Georges Bouttie;72000;Le Mans;triperie 284936;La Croix;20 rue Georges Bouttie;72000;Le Mans;triperie 284936;La Croix;20 rue Georges Bouttie;72000;Le Mans;triperie
Solution générique (à condition que les enregistrements sont entre les balises <div et </div )
$ sed ':z;N;/<\/div/! bz;s/\n//g' plop1 |sed 's/<[^>]*>/;/g;s/ *;; */;/g;s/^;//;s/;$//;s/ *- \([0-9]\{5\}\) /;\1;/;s/;[^;]*: /;/' 284936;La Croix;20 rue Georges Bouttie;72000;Le Mans;triperie $ sed ':z;N;/<\/div/! bz;s/\n//g' plop2 |sed 's/<[^>]*>/;/g;s/ *;; */;/g;s/^;//;s/;$//;s/ *- \([0-9]\{5\}\) /;\1;/;s/;[^;]*: /;/' 284936;La Croix;20 rue Georges Bouttie;72000;Le Mans;triperie $ sed ':z;N;/<\/div/! bz;s/\n//g' plop3 |sed 's/<[^>]*>/;/g;s/ *;; */;/g;s/^;//;s/;$//;s/ *- \([0-9]\{5\}\) /;\1;/;s/;[^;]*: /;/' 284936;La Croix;20 rue Georges Bouttie;72000;Le Mans;triperie 284936;La Croix;20 rue Georges Bouttie;72000;Le Mans;triperie 284936;La Croix;20 rue Georges Bouttie;72000;Le Mans;triperie
manfire
Messages postés
4
Date d'inscription
jeudi 28 janvier 2010
Statut
Membre
Dernière intervention
13 mai 2010
1
31 janv. 2010 à 14:38
31 janv. 2010 à 14:38
Bonjour,
Merci beaucoup pour vos aides, je voulait juste savoir dans le cas ou je veux spécifié de collecter d'un html seulement que les informations que je l'ai besoins par exemple on prend ce cas:
<div class="infosPermanentes"><p class="Idclient">284936</p><h2 class="nomclient">La Croix </h2><address class="adresseClient">20 rue Georges Bouttie - 72000 Le Mans </address><h3
la résultat:
La Croix;20 rue Georges Bouttie;72000;Le Mans
crd
Merci beaucoup pour vos aides, je voulait juste savoir dans le cas ou je veux spécifié de collecter d'un html seulement que les informations que je l'ai besoins par exemple on prend ce cas:
<div class="infosPermanentes"><p class="Idclient">284936</p><h2 class="nomclient">La Croix </h2><address class="adresseClient">20 rue Georges Bouttie - 72000 Le Mans </address><h3
la résultat:
La Croix;20 rue Georges Bouttie;72000;Le Mans
crd
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
31 janv. 2010 à 14:55
31 janv. 2010 à 14:55
Quelle syntaxe as-tu choisie ?
Si on s'en réfère à mon message #3, il suffit de rajouter :
Si on s'en réfère à mon message #3, il suffit de rajouter :
SOLUTION 1 : [tmpfs]$ grep -o ">[^<]*<" plop | sed '/^></d;s/>\|<//g;s/.*: //'| sed '/^$\|^[[:digit:]]*$/d'|sed ':z;N;$!bz;s/\n/;/g;s/ - /;/;s/;[[:digit:]]\{5\}/&;/' La Croix ;20 rue Georges Bouttie;72000; Le Mans ;triperie SOLUTION 2 : [tmpfs]$ w3m -dump -T text/html plop|sed '/^$\|^[[:digit:]]*$/d' |sed 's/.*: //'|sed ':z;N;$!bz;s/\n/;/g;s/ - /;/;s/;[[:digit:]]\{5\}/&;/' La Croix;20 rue Georges Bouttie;72000; Le Mans;triperie
30 janv. 2010 à 00:18
j ai utilisé la commande sed et voilà tous ce que j ai aboutis à écrire:
sed 's/.*Idclient">\([^<]*\).*nomclient">\([^<]*\) .*adresseClient">\([^<]*\) .*activiteclient">Activités : \([^<]*\).*/\1;\2;\3;\4/; s/ - /;/; s/ /;/g; s/ ;/;/g' testin > testout
le résultat:
<div class="infosPermanentes"><p class="Idclient">284936</p><h2 class="nomclient">La Croix </h2>
<address class="adresseClient">20 rue Georges Bouttie;72000;Le Mans;</address>
<h3 class="activiteclient">Activités : triperie </h3></div>
la question se pose comment je peux éliminer les balises HTML?
Merci