Cambie la fecha "29 de julio de 2011" a "20110729"

8

Tengo muchos archivos HTML que contienen fecha con formato July 29th, 2011

Quiero cambiar el formato de fecha July 29th, 2011a 20110729, December 9th, 2010a 20101209, etc.

Creo que sedpuede funcionar pero todavía no puedo encontrar la solución debido a su secuencia indirecta.

Najib-botak Chin
fuente
Usted sería mejor con Perl que puede leer un formato de salida y otra fecha, pero mi perl-foo no es lo suficientemente bueno, es de esperar que alguien más lo hará en el chip de.
EightBitTony

Respuestas:

7

Este tipo de cosas es mucho más difícil de lo que debería ser con la mayoría de las herramientas. GNU awky el módulo POSIX de Perl te dan un strftime(), pero no un strptime(), que es lo que quieres.

En cualquier caso, sigue siendo bastante fácil con Perl ...

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

Obviamente hay más, ya que realmente desea convertir el HTML. Si puede encontrar una expresión regular con sed que funcione para encontrar las cadenas de fecha, debería poder hacer algo muy similar 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"
Steven Pritchard
fuente
¿Dónde / cómo obtengo el Date::Manipmódulo? ... Mi perl me da un error, "No se puede encontrar Date / Manip.pm en @INC ..." . ¿Es un módulo adicional que necesito instalar de alguna manera? ... Estoy usando perl, v5.10.1
Peter.O
@fred: La mayoría de los administradores de paquetes de distribución tendrán esto, intente buscar allí. En mi sistema, el nombre del paquete es perl-Date-Manippero el tuyo variará. También podría obtenerlo usando cpan.
Caleb
@StevenPritchard: Escribes respuestas buenas y útiles, me alegra verte en esta comunidad. Solo me gustaría señalar que esta comunidad depende de los votos para seguir funcionando. Los votos no solo ayudan a ordenar las respuestas, sino que dan forma al sitio al cambiar lo que es visible donde, los resultados de búsqueda, y lo más importante, ayudan a mantener a los buenos usuarios cerca para vigilar el sitio. Sin votos muere. Solo has emitido 3 votos en total. ¡Te dan 30 para usar cada día! Considere usar su conocimiento para mejorar este sitio votando sobre lo que considera valioso o no.
Caleb
@Caleb: Gracias. Está en el repositorio de Ubuntu como libdate-manip-perl... @ Steven Pritchard: Es una buena solución ... Gracias.
Peter.O
1
La fecha GNU tiene tanto análisis como impresión, pero July 29th, 2011no es un formato reconocido ( July 29, 2011funciona), y necesitaría poner un poco de infraestructura de shell y sed / awk a su alrededor.
Gilles 'SO- deja de ser malvado'