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 12/11/2012, à 16:00

wysiwyg31

[résolu] Inserer une date dans un endroit précis dans un fichier texte

Bonjour !

Je cherche un peu d'aide sur les scripts en shell (si c'est bien comme ca que ca s'appelle).
J'ai un fichier post-generate.sh qui sert à faire du post-traitement customisé sur des fichiers générés automatiquement.
Pour l'instant ce fichier post-generate.sh est vide (pas de post traitement particulier).

Je voudrais traiter un fichier xml en particulier (c'est un flux rss).
Ce fichier contient les balises <pubDate></pubDate>

Je voudrais mettre la date entre ces deux balises, au format RCF822 (ce format ressemble à ca : Wed, 02 Oct 2002 13:00:00 GMT ).

La fonction strftime semble pouvoir me sortir ce format là.

Quelqu'un aurait il une idée sur ce que je dois mettre dans mon post-generate.sh pour:
- ouvrir mon fichier xml
- chercher la balise <pubDate>
- caler juste après cette balise la date dans le format qui me convient


je précise que je suis un débutant total en la matière (=je ne sais rien faire du tout en shell).

Dernière modification par wysiwyg31 (Le 29/11/2012, à 06:35)

Hors ligne

#2 Le 12/11/2012, à 16:40

PileOuFace

Re : [résolu] Inserer une date dans un endroit précis dans un fichier texte

Bonjour,
Je n'ai pas Ubuntu sous les yeux, mais la fonction 'sed' pourrait fonctionner.
Sed permet de remplacer un motif par un autre, on pourrait donc imaginer remplacer le motif "<pubDate></pubDate>" par "<pubDate>la_date</pubDate>"
Je testerai ce soir si personne n'a proposé une solution entre temps...

Hors ligne

#3 Le 12/11/2012, à 16:41

grim7reaper

Re : [résolu] Inserer une date dans un endroit précis dans un fichier texte

Salut.

Pour la partie 3, pas besoin de passer par strftime, date le fait très bien.

man 1 date a écrit :

       -R, --rfc-2822
              output date and time in RFC 2822 format.  Example: Mon, 07 Aug 2006 12:34:56 -0600

Sinon je pense que ton sujet serait mieux ici ou .

Dernière modification par grim7reaper (Le 12/11/2012, à 16:42)

Hors ligne

#4 Le 12/11/2012, à 17:03

wysiwyg31

Re : [résolu] Inserer une date dans un endroit précis dans un fichier texte

Hello,
Merci pour vos réponses !!
En combinant un "date" dans un sed, ca semble une bonne piste en effet, je vais essayer de bidouiller ce soir.

Ca pourrait donner quelque chose de ce genre ?

madate=$(date +"-R")      
sed -i  's/'<pubDate></pubDate>'/'<pubDate>'$madate'</pubDate>''   monfichier.xml

(je me suis inspiré de ce site: http://www.cyberciti.biz/faq/linux-unix … r-display/ )
pour la ligne sed, c'est du brouillon d'apres ce que j'ai pu voir mais je sens que ca risque d'etre amusant avec les ' et les /






Bonne remarque pour le placement du sujet, ca ne me semblait pas vraiment de la programmation (un simple bricolage), mais je n'avais pas vu la rubrique  Terminal, scripts et ligne de commande
Si un modérateur veut l'y mettre... (je ne crois pas pouvoir le faire moi même si ?)

Hors ligne

#5 Le 12/11/2012, à 17:17

Elzen

Re : [résolu] Inserer une date dans un endroit précis dans un fichier texte

C'est avec date et sed que je l'aurais fait de base aussi, mais je préférais attendre que quelqu'un d'autre donne son avis.

sed "s/<pubDate><\/pubDate>/<pubDate>$(date -R)<\/pubDate>/" fichier.rss

semble fonctionner chez moi.

Note : l'option -i de sed fait en sorte qu'il modifie directement le fichier que tu veux ; si tu ne précise pas cette option, il ne modifie pas le fichier, mais t'affiche le résultat dans le terminal. Ça peut être intéressant pour vérifier que tu ne fais pas de bêtises avant de faire véritablement le traitement wink

Hors ligne

#6 Le 12/11/2012, à 18:01

pingouinux

Re : [résolu] Inserer une date dans un endroit précis dans un fichier texte

Bonjour,
Même principe que ArkSeth #5, légèrement plus simple :

sed -r "s=(<pubDate>)(</pubDate>)=\1$(date -R)\2=" fichier.xml

Hors ligne

#7 Le 12/11/2012, à 20:41

wysiwyg31

Re : [résolu] Inserer une date dans un endroit précis dans un fichier texte

Hello!

J'ai finalement utilisé le second, mais les deux semblent marcher nickel (j'ai testé sans le -i pour voir).

big_smile hihi je suis tombé sur un petit os à la 2eme génération de fichier puisque mon <pubdate></pubdate> avait été modifié par le sed précédent big_smile
Ce fut vite corrigé en utilisant un fichier de reference (que je ne touche pas)

cp fichier_ref.xml fichier_rss.xml

Un grand merci en tout cas !! une affaire rondement menée !! puissant cette instruction sed.

Pour ceux que ca pourrait intéresser, il s'agissait de modifier le flux rss généré par wview un petit soft pour générer un site web avec les données d'une station météo.(le template rss par défaut ne met pas la date au bon format)

Dernière modification par wysiwyg31 (Le 12/11/2012, à 20:42)

Hors ligne

#8 Le 12/11/2012, à 20:51

pingouinux

Re : [résolu] Inserer une date dans un endroit précis dans un fichier texte

wysiwyg31 #7 a écrit :

je suis tombé sur un petit os à la 2eme génération de fichier puisque mon <pubdate></pubdate> avait été modifié par le sed précédent

Pour y remédier :

sed -r "s=(<pubDate>).*(</pubDate>)=\1$(date -R)\2=" fichier.xml

Hors ligne

#9 Le 27/11/2012, à 22:21

wysiwyg31

Re : [résolu] Inserer une date dans un endroit précis dans un fichier texte

Désolé pour le délai, mais super merci ! ca marche au poil !!!:):)

Hors ligne

#10 Le 28/11/2012, à 23:50

nesthib

Re : [résolu] Inserer une date dans un endroit précis dans un fichier texte

@pingoulinux : pourquoi « -r » ? Ça devrait fonctionner sans (il faut juste échapper les parenthèses).

@wysiwyg31 : tu peux modifier ton premier message pour ajouter [résolu] au début du titre.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne