Modifica la data da "29 luglio 2011" a "20110729"


8

Ho molti file HTML che contengono la data con il formato July 29th, 2011

Voglio cambiare il formato della data July 29th, 2011in 20110729, December 9th, 2010a 20101209, ecc.

Penso che sedpossa funzionare ma non riesco ancora a trovare la soluzione a causa della sua sequenza indiretta.


Faresti meglio con il perl che può leggere un formato di data e produrne un altro, ma il mio perl-foo non è abbastanza buono, spero che qualcun altro ci
entri

Risposte:


7

Questo genere di cose è molto più difficile di quanto dovrebbe essere con la maggior parte degli strumenti. awkIl modulo POSIX di GNU e Perl ti danno entrambi un strftime(), ma non un strptime(), che è quello che vuoi.

In ogni caso, è ancora abbastanza facile con Perl ...

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

Ovviamente c'è di più, dal momento che in realtà vuoi convertire l'HTML. Se riesci a capire una regex con sed che funzionerà per trovare le stringhe della data, dovresti essere in grado di fare qualcosa di molto simile con 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"

Dove / Come posso ottenere il Date::Manipmodulo? ... Il mio perl mi dà un errore, "Impossibile trovare Date / Manip.pm in @INC ..." . È un modulo aggiuntivo che devo installare in qualche modo? ... sto usando perl, v5.10.1
Peter

@fred: la maggior parte dei gestori di pacchetti di distribuzione avrà questo, prova a cercare lì. Sul mio sistema il nome del pacchetto è perl-Date-Manipma il tuo varierà. Potresti anche ottenerlo usando cpan.
Caleb,

@StevenPritchard: scrivi buone e utili risposte, sono felice di vederti in questa community. Vorrei solo notare che questa comunità dipende dai voti per continuare a funzionare. Non solo i voti aiutano a ordinare le risposte, ma modellano il sito modificando ciò che è visibile dove, i risultati di ricerca e, soprattutto, aiutano a mantenere buoni utenti in giro per sorvegliare il sito. Senza voti muore. Hai solo un totale di 3 voti. Ti vengono dati 30 da utilizzare ogni giorno! Considera di utilizzare le tue conoscenze per migliorare questo sito votando su ciò che ritieni sia prezioso o meno.
Caleb,

@Caleb: grazie. È nel repository di Ubuntu come libdate-manip-perl.... @Steven Pritchard: è una bella soluzione ... Grazie.
Peter

1
La data di GNU ha sia l'analisi che la stampa, ma July 29th, 2011non è un formato riconosciuto ( July 29, 2011funziona) e dovresti mettere un po 'di shell e infrastrutture sed / awk attorno ad esso.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.