NOTA : esta é uma resposta editada para tornar a solução o mais geral possível. Veja o histórico de edições para ver o que foi feito originalmente e veja os comentários dos problemas com a resposta anterior.
A chave aqui é usar o agrupamento via ()
e -r
para expressões regulares estendidas. O agrupamento de padrões com ()
permitirá que você se refira a eles com base em sua posição na notação via \NUMBER
. Em particular, aqui está o que eu criei:
sed -r 's/0*([^0]+)\/0*([^0]+)/\//g'
Isso é assim:
- corresponde a zero ou mais caracteres que são zero
- agrupa um ou mais caracteres diferentes de zero que seguem
- em seguida, procure por barra seguida de zero ou mais caracteres que são zero
- e agrupar um ou mais caracteres diferentes de zero que seguem
Na prática, isso funciona assim com um número variável de zeros:
$ echo "at 12:27 AM on 11/08/2017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\//g'
at 12:27 AM on 11/8/2017
$ echo "at 12:27 AM on 00000011/000008/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\//g'
at 12:27 AM on 11/8/00002017
$ echo "at 12:27 AM on 011/08/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\//g'
at 12:27 AM on 11/8/00002017
$ echo "at 12:27 AM on 000000011/0000008/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\//g'
at 12:27 AM on 11/8/00002017
Observe que isso é bom o suficiente para reter o que vier na parte do ano, se necessário. Se quisermos nos livrar disso também, também podemos adicionar um terceiro grupo.
$ echo "at 12:27 AM on 005/0025/0002017" | sed -r 's/0*([^0]+)\/0*([^0]+)\/0*([^0]+)/\/\//g'
at 12:27 AM on 5/25/2017
Isso também funciona muito bem com outros caracteres (o que não era obrigatório, mas é bom ter):
$ echo "at 12:27 AM on 0November/00Fifth/2017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\//g'
at 12:27 AM on November/Fifth/2017