Não, não funcionará com (apenas) sed
porque você terá que analisar a data como parte do processo.
Você pode fazer isso com uma combinação do comando date
, ou pessoalmente eu usaria perl
- você pode usá-lo muito parecido com sed
, mas também tem o módulo Time::Piece
que data analisando também.
Exemplo de execução:
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
while ( <DATA> ) {
chomp;
print Time::Piece->strptime($_, "%d/%m/%Y")->strftime("%B %Y"),"\n";
}
__DATA__
26/04/2008
26/05/2008
26/07/2009
Que você pode 'one liner' para uso em pipes (ou você pode especificar arquivos para processar como argumentos no final):
perl -MTime::Piece -nle 'print Time::Piece->strptime($_, "%d/%m/%Y")->strftime("%B %Y");'
Nota - ambos pressupõem que as datas são apenas uma por linha. Não é particularmente difícil extraí-lo como subseqüente, se desejado, e efetivamente "sedá-lo" como um padrão de substring.
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
while ( <DATA> ) {
s|(\d{2}/\d{2}/\d{4})|Time::Piece->strptime($1, "%d/%m/%Y")->strftime("%B %Y")|e;
print;
}
__DATA__
26/04/2008 and some text here
a line like this with a date of 26/05/2008
26/07/2009 and some more here maybe
Transformará isso em:
April 2008 and some text here
a line like this with a date of May 2008
July 2009 and some more here maybe
Mais uma vez, um-liner-ify como:
perl -MTime::Piece -pe 's|(\d{2}/\d{2}/\d{4})|Time::Piece->strptime($1, "%d/%m/%Y")->strftime("%B %Y")|e;'