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

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

eu tenho isto :

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

Quando eu uso o acima para mudar isso: Meu formato de arquivo de textonome:não:não:tipo:p

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

assumindo $nome = Tom , $P = 55,5

Eu entendi isso :

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

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

se torna

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 

Ele apenas altera o valor de :0 Se o valor for maior que 0 , não mudará em nada. Supondo que eu insistiria em usar sed para isso. coloquei o :na posição errada? Estou tentando alterar o valor da última coluna depois:

Responder1

Respondido nos comentários:

AFAIK: não precisa ser escapado aqui. Porém desde então. não estiver no intervalo [0-9], o padrão [0-9]* não corresponderá a decimais como 55,5 - você precisaria de algo como [0-9.]* ou seja, "/$nome/s/: [0-9.]*$/:$P/"

informação relacionada