Isso pressupõe que há algum texto não numérico após o número:
echo "loremipsumdolorsit2367amet" \
| sed -r -e 's/[0-9]/0000000&/' -e 's/0*([0-9]{8}[^0-9])//'
Resultado: loremipsumdolorsit00002367amet
Isso não pressupõe que:
... | sed -r -e 's/[0-9]/0000000&/' -e 's/0*([0-9]{8}([^0-9]|$))//'
Estes usam os padrões ERE para sed. Muitas implementações de sed usam o sinalizador -r
para especificar isso; alguns usam o -E
flag; alguns usam ambos. Atualmente, a capacidade de usar padrões ERE no sed não faz parte do padrão POSIX, mas há rumores de adicioná-lo ao padrão. Não encontrei uma implementação moderna de sed que não tenha a capacidade de usar padrões ERE de uma forma ou de outra.
Em alguns casos, há coisas que você pode fazer usando padrões ERE que você não pode fazer usando os padrões de sed padrão (BREs). Consulte os comentários para esta resposta . Mas no presente caso, o uso de padrões ERE é apenas por conveniência. Como o sch diz em um comentário, você pode omitir o sinalizador -r
(ou -E
) e simplesmente substituir o (...)
por \(...\)
e o {8}
por \{8\}
. Minha resposta original fez uso de +
, que também não faz parte dos padrões BRE; mas na verdade isso não era necessário para a solução.