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
sed
suporta-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.