Changer la date «29 juillet 2011» en «20110729»


8

J'ai beaucoup de fichiers HTML contient une date au format July 29th, 2011

Je souhaite modifier le format de date July 29th, 2011en 20110729, December 9th, 2010en 20101209, etc.

Je pense que cela sedpeut fonctionner mais ne trouve toujours pas la solution en raison de sa séquence indirecte.


Vous feriez mieux avec perl qui peut lire un format de date et en produire un autre, mais mon perl-foo n'est pas assez bon, j'espère que quelqu'un d'autre y participera.
EightBitTony

Réponses:


7

Ce genre de chose est beaucoup plus difficile qu'il ne devrait l'être avec la plupart des outils. GNU awket le module POSIX de Perl vous donnent tous les deux un strftime(), mais pas un strptime(), ce que vous voulez.

En tout cas, c'est quand même assez facile avec Perl ...

$ perl -MDate::Manip -lpe '$_=UnixDate(ParseDate($_), "%Y%m%d")' <<END
> July 29th, 2011
> December 9th, 2010
> END
20110729
20101209

Évidemment, il y a plus, car vous voulez réellement convertir le HTML. Si vous pouvez trouver une expression rationnelle avec sed qui fonctionnera pour trouver les chaînes de date, vous devriez pouvoir faire quelque chose de très similaire avec Perl.

$ perl -MDate::Manip -lpe 's/(")([^"]+)(")/$1 . UnixDate(ParseDate($2), "%Y%m%d") . $3/ge' <<END
dates enclosed "July 29th, 2011" in quotes
"December 9th, 2010"
END
dates enclosed "20110729" in quotes
"20101209"

Où / comment obtenir le Date::Manipmodule? ... Mon Perl me donne une erreur, "Impossible de localiser Date / Manip.pm dans @INC ..." . Est-ce un module supplémentaire que je dois installer d'une manière ou d'une autre? ... j'utilise perl, v5.10.1
Peter.O

@fred: La plupart des gestionnaires de packages de distribution auront ceci, essayez de chercher là-bas. Sur mon système, le nom du package est, perl-Date-Manipmais le vôtre variera. Vous pouvez également l'obtenir en utilisant cpan.
Caleb

@StevenPritchard: Vous écrivez de bonnes et utiles réponses, je suis heureux de vous voir autour de cette communauté. Je voudrais juste noter que cette communauté dépend des votes pour continuer à fonctionner. Non seulement les votes aident à trier les réponses, mais ils façonnent le site en modifiant ce qui est visible, les résultats de la recherche et, surtout, aident les bons utilisateurs à surveiller le site. Sans votes, il meurt. Vous n'avez obtenu que 3 votes au total. Vous en avez 30 à utiliser chaque jour! Veuillez envisager d'utiliser vos connaissances pour améliorer ce site en votant sur ce que vous jugez utile ou non.
Caleb

@Caleb: Merci. Il est dans le référentiel d'Ubuntu en tant que libdate-manip-perl.... @Steven Pritchard: C'est une bonne solution ... Merci.
Peter.O

1
La date GNU a à la fois l'analyse et l'impression, mais July 29th, 2011n'est pas un format reconnu ( July 29, 2011fonctionne), et vous auriez besoin de mettre un peu d'infrastructure shell et sed / awk autour.
Gilles 'SO- arrête d'être méchant'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.