altera a saída de data no arquivo

0

Eu estou olhando para converter este tipo de entrada em um arquivo txt 26/04/2008 a abril de 2008

Nota: isto não está usando o comando date, são entradas de data em um arquivo

Posso fazer isso com sed?

Isso faz parte de um script de liner usando pipe etc.

    
por johndoe12345 05.10.2015 / 12:48

1 resposta

1

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;'  
    
por 05.10.2015 / 13:04