torr para substituir todas as ocorrências de um número preenchido com zero à esquerda, com um sinal de subtração embutido “-“, de forma que o sinal de menos fique à esquerda

0

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

    
por ProductionSupport 10.11.2018 / 07:18

2 respostas

2

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

    
por 10.11.2018 / 07:51
1

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.

    
por 10.11.2018 / 09:29

Tags