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='
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!
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='
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}'
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.