Alterar data “29 de julho de 2011” para “20110729”

8

Eu tenho muitos arquivos HTML contendo data com o formato July 29th, 2011

Desejo alterar o formato de data July 29th, 2011 para 20110729 , December 9th, 2010 para 20101209 , etc.

Acho que sed pode funcionar, mas ainda não consegue encontrar a solução por causa de sua sequência indireta.

    
por Najib-botak Chin 30.07.2011 / 09:33

1 resposta

7

Esse tipo de coisa é muito mais difícil do que deveria ser com a maioria das ferramentas. O GNU awk e o módulo POSIX do Perl fornecem um strftime() , mas não um strptime() , que é o que você deseja.

De qualquer forma, ainda é bem fácil com o Perl ...

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

Obviamente, há mais, já que você realmente quer converter o HTML. Se você puder descobrir um regex com sed que funcione para encontrar as strings de data, você deve ser capaz de fazer algo muito semelhante com o 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"
    
por 30.07.2011 / 16:04