secuencias de comandos de shell de Linux que reemplazan el valor después de un delimitador específico usando sed

secuencias de comandos de shell de Linux que reemplazan el valor después de un delimitador específico usando sed

tengo esto :

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

Cuando uso lo anterior para cambiar esto: Mi formato de archivo de textonombre:no:no:tipo:p

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

suponiendo $nombre = Tom, $P = 55,5

entiendo esto :

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

Sin embargo, si intento cambiar el $P de 55,5 a 41,5

se vuelve

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

Yo he tratado :

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

Solo cambia el valor de :0 Si el valor es mayor que 0, no cambiará en absoluto. Suponiendo que insistiría en usar sed para esto. ¿Lo he colocado :en la posición incorrecta? Estoy intentando cambiar el valor de la última columna después:

Respuesta1

Respondido en los comentarios.:

AFAIK: no es necesario escapar aquí. Sin embargo, desde . no está en el rango [0-9], el patrón [0-9]* no coincidirá con decimales como 55,5; necesitaría algo como [0-9.]* es decir, "/$nombre/s/: [0-9.]*$/:$P/"

información relacionada