Na verdade, é simples apenas se você faz muitas suposições. Como a pergunta não forneceu um exemplo, aqui estão algumas suposições realistas:
- o delimitador entre os campos da data é /
- os arquivos csv têm mais de uma coluna
- a data pode estar em qualquer coluna
- outras colunas podem ter números
O exemplo de Stephen não abordou os três últimos. Aqui está um script mostrando duas melhorias:
#!/bin/sh
INPUT=foo.csv
echo GIVEN
cat $INPUT
echo BEFORE
sed -e 's!^[0-9]/!0&!' -e 's!/\([0-9]/\)!/0!' <$INPUT
echo IMPROVED
sed \
-e 's,^\([0-9][/]\),0,' \
-e 's,\([,/]\)\([0-9]\),000,g' \
-e 's,^0*\([0-9]\{2\}[/]\),,' \
-e 's,\([,/]\)0*\([0-9]\{2\}\),,g' \
<$INPUT
echo BETTER
sed \
-e 's,^\([0-9][/]\),0,' \
-e 's,\([,/]\)\([0-9]\),000,g' \
-e 's,^0*\([0-9]\{2\}[/]\),,' \
-e 's!0*\([0-9]\{2\}\)\([,/]\)0*\([0-9]\{2\}\)\([/]\)0*\([0-9]\{4,\}\)!!g' \
<$INPUT
e saída da execução do script:
GIVEN
1/1/1970
10/1/2000
10/10/2100
first,1/1/1970
second,10/1/2000
third,10/10/2100
9term,1/1/1
BEFORE
01/01/1970
10/01/2000
10/10/2100
first,1/01/1970
second,10/01/2000
third,10/10/2100
9term,1/01/1
IMPROVED
01/01/1970
10/01/2000
10/10/2100
first,01/01/1970
second,10/01/2000
third,10/10/2100
9term,01/01/01
BETTER
01/01/1970
10/01/2000
10/10/2100
first,01/01/1970
second,10/01/2000
third,10/10/2100
9term,01/01/0001
Uma solução completa levaria em conta melhor os limites (como desconto de itens como 1/1/1text
) e aspas (arquivos csv usam aspas duplas para trabalhar com vírgulas dentro de colunas).