shell script do Linux substituindo valor após um delimitador específico usando sed

0

eu tenho isso:

sed -e "/$name/s/[0-9]\:*$/$P/" -i sales_info.txt 

Quando eu uso o acima para alterar isso: Meu formato de arquivo de texto nome: no: no: type: p

Tom:8:987654:commission:0
Tommy:7:12379813:hourly:0
Fan:5:2132131:salaried:0

assumindo $ name = Tom, $ P = 55.5

eu entendo isso:

Tom:8:987654:commission:0
Tommy:7:12379813:hourly:55.5
Fan:5:2132131:salaried:0

No entanto, se eu tentar mudar o $ P de 55,5 para 41,5

torna-se

Tom:8:987654:commission:0
Tommy:7:12379813:hourly:55.41.5
Fan:5:2132131:salaried:0

Eu tentei:

sed -e "/$name/s/\:[0-9]*$/\:$P/" -i sales_info.txt 

Altera apenas o valor de :0  Se o valor for maior que 0, ele não será alterado. Assumindo se eu insistiria em usar sed para isso. coloco o : na posição errada? Estou tentando alterar o último valor da coluna após :

    
por what 04.11.2016 / 02:58

1 resposta

1

Respondido nos comentários :

AFAIK : doesn't need to be escaped here. However since . isn't in the range [0-9], the pattern [0-9]* won't match decimals like 55.5 - you'd need something like [0-9.]* i.e. "/$name/s/:[0-9.]*$/:$P/"

    
por 13.04.2017 / 14:36

Tags