Usando sed para alterar o formato de saída

2

Como posso usar sed para alterar o formato de saída de um arquivo de texto?

Meu arquivo de texto contém e exibe isso quando eu chamo cat:

9/27/2002
9/28/2002
10/1/2002
10/2/2002
10/10/2002
10/11/2002
12/29/2002
1/1/2003
1/2/2003

Eu quero que ele seja exibido assim usando sed (removendo o '/', adicionando o espaço e adicionando zeros aos dias e meses):

2002 09 27
2002 09 28
2002 10 01
2002 10 02
2002 10 10
2002 10 11
2002 12 29
2003 01 01
2003 01 02

Qualquer ajuda será muito apreciada!

    
por Jurgen Malinao 19.04.2013 / 23:28

3 respostas

3

Use grupos de captura. A primeira parte altera a ordem dos números, a segunda adiciona zeros às segundas colunas, a terceira adiciona zeros à terceira.

sed -e 's=\(.*\)/\(.*\)/\(.*\)=  =' -e 's= \(.\) = 0 =' -e 's= \(.\)$= 0='
    
por 19.04.2013 / 23:37
3

Você tem uma boa solução sed do @chorba, aqui está como você pode fazer isso com o awk:

awk -F/ '{printf "%d %02d %02d\n", $3, $1, $2}'
    
por 19.04.2013 / 23:53
1

Se você pode aceitar uma solução não-sed para o problema (por que se limitar a sed?), aqui está a solução canônica perl , além do awk :

perl -laF/ -ne 'printf "%s %02d %02d\n", @F[2,0,1]'

Explicação:

-a    auto-splits the input into the array @F
-l    strips newline on input
-F/   defines input delimiter to split on
-n    loops over all lines of input
-e    perl expression to run in each loop pass

printf       self explanatory

Você pode passar sua entrada como nome (s) de arquivo após a chamada perl ou via entrada padrão.

    
por 20.04.2013 / 06:23

Tags