Alterar data "29 de julho de 2011" para "20110729"

8

Eu tenho muitos arquivos HTML contém data com formato July 29th, 2011

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

Eu acho que sedpode funcionar, mas ainda não consigo encontrar a solução por causa de sua sequência indireta.

Najib-botak Chin
fonte
Você seria melhor fora com perl que pode ler um formato e saída de outra data, mas meu perl-foo não é bom o suficiente, espero que alguém chip vai outro lugar.
EightBitTony

Respostas:

7

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

De qualquer forma, ainda é muito 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 do que isso, já que você realmente deseja converter o HTML. Se você conseguir descobrir um regex com o sed que funcione para encontrar as seqüências de datas, poderá fazer algo muito semelhante ao 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
fonte
Onde / como obtenho o Date::Manipmódulo? ... Meu perl me dá um erro, "Não é possível localizar Data / Manip.pm no @INC ..." . É um módulo extra que preciso instalar de alguma forma? ... estou usando o perl, v5.10.1
Peter.O
@fred: A maioria dos gerentes de pacotes de distribuição terá isso, tente pesquisar lá. No meu sistema, o nome do pacote é perl-Date-Manipmas o seu varia. Você também pode obtê-lo usando cpan.
Caleb
@StevenPritchard: Você escreve respostas boas e úteis, fico feliz em vê-lo nesta comunidade. Gostaria apenas de observar que esta comunidade depende de votos para continuar funcionando. Os votos não apenas ajudam a classificar as respostas, mas também moldam o site alterando o que é visível onde, os resultados da pesquisa e, o mais importante, ajudam a manter bons usuários por perto para policiar o site. Sem votos, morre. Você só deu 3 votos no total. Você tem 30 para usar todos os dias! Por favor, considere usar seu conhecimento para melhorar este site votando no que você considera valioso ou não.
Caleb
@ Caleb: Obrigado. Está no repositório do Ubuntu como libdate-manip-perl.... @Steven Pritchard: É uma boa solução ... Obrigado.
Peter.O
1
A data GNU tem análise e impressão, mas July 29th, 2011não é um formato reconhecido ( July 29, 2011funciona), e você precisa colocar um pouco de infraestrutura shell e sed / awk em torno dele.
Gilles 'SO- stop be evil'