Com o GNU sed:
Alterar a ordem do número e menos para menos e número.
sed -r 's/([0-9]+)(-)//g' file
Saída:
ABC -00045.123 -0765.43 DEF -0054 XYZ
Veja: Perguntas frequentes sobre expressões regulares de estouro de pilha
Eu tenho um arquivo de entrada delimitado por tabulações. Alguns valores de campos numéricos têm um sinal de menos no meio do valor, como 000-45.123
. Eu preciso que o -
esteja no lado esquerdo desta forma: -00045.123
Portanto, se o arquivo de entrada delimitado por tabulações contiver: (espaços são tabulações)
ABC 000-45.123 0-765.43 DEF 00-54 XYZ
quero então que o resultado seja
ABC -00045.123 -0765.43 DEF -0054 XYZ
Todos os valores numéricos com um “-“ embutido começam com 1 ou mais zeros e nenhum outro caractere.
Nota: Eu não tenho estas opções disponíveis: sed -r ou sed -E
Com o GNU sed:
Alterar a ordem do número e menos para menos e número.
sed -r 's/([0-9]+)(-)//g' file
Saída:
ABC -00045.123 -0765.43 DEF -0054 XYZ
Veja: Perguntas frequentes sobre expressões regulares de estouro de pilha
POSIXly:
TAB=$(printf '\t')
sed "s/^\(00*\)-/-/;s/${TAB}\(00*\)-/$TAB-/g"
Precisamos considerar os dois casos do primeiro campo ( 00-
no início da linha) ou os outros campos ( 00-
após uma TAB).
Com sed
implementations suportando -E
(para expressões regulares estendidas) e shells suportando $'...'
(sendo que ambos provavelmente farão parte de uma futura versão da especificação POSIX), você pode simplificá-lo para:
sed -E $'s/(^|\t)(0+)-/-/g'
em vez disso.
Tags sed