[Shell] Commande programmation
Résolu/Fermé
Romain
-
12 nov. 2010 à 19:52
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 13 nov. 2010 à 22:46
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 13 nov. 2010 à 22:46
A voir également:
- [Shell] Commande programmation
- Invite de commande - Guide
- Commande terminal mac - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Application de programmation - Guide
- Commande dism - Guide
6 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
12 nov. 2010 à 20:12
12 nov. 2010 à 20:12
Salut,
Peux-tu poster un exemple concret AVANT => APRÈS de ce que tu veux exactement ? S'il te plaît, merci.
Sinon déjà, concernant la commande "sed", essaie ça :
;-))
Peux-tu poster un exemple concret AVANT => APRÈS de ce que tu veux exactement ? S'il te plaît, merci.
Sinon déjà, concernant la commande "sed", essaie ça :
$ echo $A 07/09/2010;Accueil;13:00;1h;4-r0-2 $ echo $A | sed 's/\([^;]*\);\([^;]*\);\([^;]*\);\([^;]*\);\(.*\)/\2;\5;\1;\3;\4/' Accueil;4-r0-2;07/09/2010;13:00;1h $
;-))
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
Modifié par zipe31 le 13/11/2010 à 10:36
Modifié par zipe31 le 13/11/2010 à 10:36
Juste un truc avant d'aller plus loin, quand tu récupères ton fichier html, plus tôt que de traiter le code source, ne serait-il pas plus simple de traiter la sortie déjà formatée ?
Un exemple avec "w3m" :
;-))
Zen my nuggets ;-)
Un exemple avec "w3m" :
$ cat plop.html <BODY class="margin"> <table> <tr class="subHeader1"> <td colspan=4>Activité</td> <td colspan=1>Salles</td></tr> <tr class="subHeader1"><td><a href="info.jsp?order=slot&light=true">Date</a></td><td><a href="info.jsp?order=activityName&light=true">Nom</a></td><td><a href="info.jsp?order=hour&light=true">Heure</a></td><td><a href="info.jsp?order=duration&light=true">Durée</a></td><td><a href="info.jsp?order=cat3Name&light=true">Nom</a></td></tr> <tr><td><SPAN CLASS="value">07/09/2010</span></td><td><a href="javascript:ev(1008)">Accueil</a></td><td>13:00</td><td>1h</td><td>4-r0-2 </td></tr><tr><td><SPAN CLASS="value">08/09/2010</span></td><td><a href="javascript:ev(1518)">Resis Mat</a></td><td>14:00</td><td>1h20min</td><td>3-r0-7 </td></tr><tr><td><SPAN CLASS="value">08/09/2010</span></td><td><a href="javascript:ev(7069)">Caract Mat</a></td><td>15:30</td><td>1h20min</td><td>3-r0-7 </td></tr><tr><td><SPAN CLASS="value">09/09/2010</span></td><td><a href="javascript:ev(1417)">Resis Mat</a></td><td>09:30</td><td>1h20min</td><td>4-r0-4 </td></tr><tr><td><SPAN CLASS="value">09/09/2010</span></td><td><a href="javascript:ev(2109)">Méth. Opti</a></td><td>11:00</td><td>1h20min</td><td>4-r0-4 </td></tr><tr><td><SPAN CLASS="value">09/09/2010</span></td><td><a href="javascript:ev(2710)">Stages et Semestre à l'Etranger</a></td><td>14:00</td><td>1h</td><td>0-r0-2 : Amphi 300 ... $ w3m -dump -T text/html plop.html Activité Salles Date Nom Heure Durée Nom 07/09/2010 Accueil 13:00 1h 4-r0-2 08/09/2010 Resis Mat 14:00 1h20min 3-r0-7 08/09/2010 Caract Mat 15:30 1h20min 3-r0-7 09/09/2010 Resis Mat 09:30 1h20min 4-r0-4 09/09/2010 Méth. Opti 11:00 1h20min 4-r0-4 09/09/2010 Stages et Semestre à l'Etranger 14:00 1h 0-r0-2 : Amphi 300 ...
;-))
Zen my nuggets ;-)
Salut,
Voici ce que j'obtiens avec un précédent script que j'ai récupéré sur google code et modifié. Ce script va chercher mon emploi du temps sur internet et me génère un fichier html qui ressemble à ça:
Donc là je supprime tout ce qui concerne les balises html pour arriver à un fichier de ce genre:
Grace à ce code que j'ai mis dans un fichier script en .sh
Jusque là tout va bien, à part que je dois faire manuellement les retours à la ligne pour chaque évènement car comme j'ai dit dans mon précédent message le ^M dans mon fichier script fonctionne pas et en le tapant avec CTRL +V et CTRL +M fonctionne.
et maintenant je sais plus trop comment faire pour la "finition"
Le fichier final devra ressembler à ça : (fichier .ics pour importer dans google agenda)
Donc pour ce qui est de rajoutter la syntaxe du format ics sa devrait aller par contre le problème c'est pour cette ligne: DTEND:20100907T140000Z
qui est du type: yyyymmjjThhmmssZ
Sauf que moi j'ai l'heure de début et la durée et que donc il faut qu'il calcule l'heure de fin mais je ne sous-estime pas linux et je suis sur qu'il en est capable !!
J'essaye ce que tu m'as dit pour l'ordre sa me permettra d'avancer un peu plus
Voici ce que j'obtiens avec un précédent script que j'ai récupéré sur google code et modifié. Ce script va chercher mon emploi du temps sur internet et me génère un fichier html qui ressemble à ça:
<BODY class="margin"> <table> <tr class="subHeader1"> <td colspan=4>Activité</td> <td colspan=1>Salles</td></tr> <tr class="subHeader1"><td><a href="info.jsp?order=slot&light=true">Date</a></td><td><a href="info.jsp?order=activityName&light=true">Nom</a></td><td><a href="info.jsp?order=hour&light=true">Heure</a></td><td><a href="info.jsp?order=duration&light=true">Durée</a></td><td><a href="info.jsp?order=cat3Name&light=true">Nom</a></td></tr> <tr><td><SPAN CLASS="value">07/09/2010</span></td><td><a href="javascript:ev(1008)">Accueil</a></td><td>13:00</td><td>1h</td><td>4-r0-2 </td></tr><tr><td><SPAN CLASS="value">08/09/2010</span></td><td><a href="javascript:ev(1518)">Resis Mat</a></td><td>14:00</td><td>1h20min</td><td>3-r0-7 </td></tr><tr><td><SPAN CLASS="value">08/09/2010</span></td><td><a href="javascript:ev(7069)">Caract Mat</a></td><td>15:30</td><td>1h20min</td><td>3-r0-7 </td></tr><tr><td><SPAN CLASS="value">09/09/2010</span></td><td><a href="javascript:ev(1417)">Resis Mat</a></td><td>09:30</td><td>1h20min</td><td>4-r0-4 </td></tr><tr><td><SPAN CLASS="value">09/09/2010</span></td><td><a href="javascript:ev(2109)">Méth. Opti</a></td><td>11:00</td><td>1h20min</td><td>4-r0-4 </td></tr><tr><td><SPAN CLASS="value">09/09/2010</span></td><td><a href="javascript:ev(2710)">Stages et Semestre à l'Etranger</a></td><td>14:00</td><td>1h</td><td>0-r0-2 : Amphi 300 ...
Donc là je supprime tout ce qui concerne les balises html pour arriver à un fichier de ce genre:
07/09/2010;Accueil;13:00;1h;4-r0-2 08/09/2010;Resis Mat;14:00;1h20min;3-r0-7 08/09/2010;Caract Mat;15:30;1h20min;3-r0-7 09/09/2010;Resis Mat;09:30;1h20min;4-r0-4 09/09/2010;Méth. Opti;11:00;1h20min;4-r0-4 09/09/2010;Stages et Semestre à l'Etranger;14:00;1h;0-r0-2 : Amphi 300
Grace à ce code que j'ai mis dans un fichier script en .sh
sed -i '1,37 d' test sed -i '2,3 d' test sed -i 's|<tr><td><SPAN CLASS="value">|ABC-|g' test sed -i 's|</span></td><td><a href="javascript:ev(.....)">|;|g' test sed -i 's|</span></td><td><a href="javascript:ev(....)">|;|g' test sed -i 's|</span></td><td><a href="javascript:ev(...)">|;|g' test sed -i 's|</span></td><td><a href="javascript:ev(..)">|;|g' test sed -i 's|</a></td><td>|;|g' test sed -i 's|</td><td>|;|g' test sed -i 's|</td></tr>||g' test
Jusque là tout va bien, à part que je dois faire manuellement les retours à la ligne pour chaque évènement car comme j'ai dit dans mon précédent message le ^M dans mon fichier script fonctionne pas et en le tapant avec CTRL +V et CTRL +M fonctionne.
et maintenant je sais plus trop comment faire pour la "finition"
Le fichier final devra ressembler à ça : (fichier .ics pour importer dans google agenda)
BEGIN:VCALENDAR BEGIN:VEVENT DTSTART:20100907T130000Z DTEND:20100907T140000Z SUMMARY:Accueil LOCATION:4-r0-2 END:VEVENT BEGIN:VEVENT DTSTART:20100908T140000Z DTEND:20100908T152000Z SUMMARY:Resis Mat LOCATION:3-r0-7 END:VEVENT BEGIN:VEVENT DTSTART:20100908T153000Z DTEND:20100908T165000Z SUMMARY:Caract Mat LOCATION:3-r0-7 END:VEVENT BEGIN:VEVENT DTSTART:20100909T093000Z DTEND:20100909T105000Z SUMMARY:Resis Mat LOCATION:4-r0-4 END:VEVENT ... END:VCALENDAR
Donc pour ce qui est de rajoutter la syntaxe du format ics sa devrait aller par contre le problème c'est pour cette ligne: DTEND:20100907T140000Z
qui est du type: yyyymmjjThhmmssZ
Sauf que moi j'ai l'heure de début et la durée et que donc il faut qu'il calcule l'heure de fin mais je ne sous-estime pas linux et je suis sur qu'il en est capable !!
J'essaye ce que tu m'as dit pour l'ordre sa me permettra d'avancer un peu plus
Sinon ta commande un peu modifié fonctionne cependant elle fonctionne pour une seule ligne.
La commande:
Entrée:
Sortie:
C'est bon !
Par contre pour plusieurs lignes:
Entrée:
Sortie:
Là sa fonctionne plus...
La commande:
sed -i 's|\([^;]*\);\([^;]*\);\([^;]*\);\([^;]*\);\(.*\);|\2;\5;\1;\3;\4|g' test
Entrée:
08/09/2010;Resis Mat;14:00;1h20min;3-r0-7;
Sortie:
Resis Mat;3-r0-7;08/09/2010;14:00;1h20min
C'est bon !
Par contre pour plusieurs lignes:
Entrée:
07/09/2010;Accueil;13:00;1h;4-r0-2; 08/09/2010;Resis Mat;14:00;1h20min;3-r0-7;
Sortie:
Accueil;4-r0-2; 08/09/2010;Resis Mat;14:00;1h20min;3-r0-7;07/09/2010;13:00;1h
Là sa fonctionne plus...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonne nouvelle, j'ai trouvé comment faire mon retour chariot grâce à mon script : il suffisait d'utiliser le caractère \r qui correspond au retour chariot.
le code :
le code :
sed -i 's|ABC-|\r|g' test
Nouvelle bonne nouvelle !
Le fichier ics a un paramètre 'DURATION' qui est la durée de l'évènement donc je n'ai plus besoin de faire le temps de fin avec une somme ce qui va faciliter grandement les choses.
J'arrive à faire cette sortie maintenant:
Ma nouvelle question: Comment appliquer un sed sur une ligne en particulier, je m'explique j'ai besoin de changer le 'h' de la durée en H mais pas les h des autres lignes. Comment faire ?
De meme pour changer le format de la ligne DTSTART: j'ai la commande qui fonctionne si je met juste 07/09/201013:00 en entrée mais comment l'appliquer à cet endroit en particulier ??
Le fichier ics a un paramètre 'DURATION' qui est la durée de l'évènement donc je n'ai plus besoin de faire le temps de fin avec une somme ce qui va faciliter grandement les choses.
J'arrive à faire cette sortie maintenant:
BEGIN:VEVENT SUMMARY:Accueil LOCATION:4-r0-2 DTSTART:07/09/201013:00 DURATION:1h END:VEVENT
Ma nouvelle question: Comment appliquer un sed sur une ligne en particulier, je m'explique j'ai besoin de changer le 'h' de la durée en H mais pas les h des autres lignes. Comment faire ?
De meme pour changer le format de la ligne DTSTART: j'ai la commande qui fonctionne si je met juste 07/09/201013:00 en entrée mais comment l'appliquer à cet endroit en particulier ??
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
13 nov. 2010 à 10:55
13 nov. 2010 à 10:55
$ cat fich BEGIN:VEVENT SUMMARY:Accueil LOCATION:4-r0-2 DTSTART:07/09/201013:00 DURATION:1h END:VEVENT $ sed '/^DURATION/ s/h/H/' fich BEGIN:VEVENT SUMMARY:Accueil LOCATION:4-r0-2 DTSTART:07/09/201013:00 DURATION:1H END:VEVENT
Ah ! Sa marche pas ... :-(
J'ai un fichier texte avec mon texte qui s'appelle test
Je fais ta commande: sed -i '/^DURATION/ s/h/H/' test
Mais j'ai rien qui change dans mon fichier de sortie. J'ai toujours le h minuscule, c'est bizarre
J'ai un fichier texte avec mon texte qui s'appelle test
BEGIN:VEVENT SUMMARY:Accueilh LOCATION:4-r0-2 DTSTART:07/09/201013:00 DURATION:1h END:VEVENT
Je fais ta commande: sed -i '/^DURATION/ s/h/H/' test
Mais j'ai rien qui change dans mon fichier de sortie. J'ai toujours le h minuscule, c'est bizarre
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
13 nov. 2010 à 13:00
13 nov. 2010 à 13:00
Affiche le résultat de la commande :
cat -A test