No GNU sed, ele procura por um traço seguido por alguns dígitos ou pontos e substitui os mesmos dígitos entre parênteses. Ou seja, ele transforma -123.45 em (123.45) .
Em alguns outros sed s, como o baseado no BSD no macOS, ele procura por um traço, um dígito ou um ponto e um sinal de mais literal e, em seguida, remove o traço e circunda o restante entre parênteses. Ou seja, ele transforma -1+ em (1+) , mas deixa coisas como -123 como está.
A diferença é porque \+ não tem um significado padrão em expressões regulares básicas. O GNU o interpreta como o mesmo que + em expressões regulares estendidas, ou seja, "uma ou mais das anteriores", enquanto outras consideram literal + .
Quanto às outras partes no padrão à esquerda, o traço coincide, [0-9.] corresponde a qualquer dígito ou ponto e o \( .. \) captura a parte intermediária. Na substituição, os parênteses são literais e retorna o que estava dentro de \( .. \) .
Mais portably, isso deve ser
-
no RE estendido, supondo que seu
sedsuporta-E, o que muitos fazem:sed -E 's/-([0-9.]+)/()/' -
no RE básico:
sed 's/-\([0-9.]\{1,\}\)/()/'
Ambos devem substituir um traço na frente de um número entre parênteses ao redor dele.