Linux-Shell-Scripting: Ersetzen des Werts nach einem bestimmten Trennzeichen mithilfe von sed

Linux-Shell-Scripting: Ersetzen des Werts nach einem bestimmten Trennzeichen mithilfe von sed

ich habe das :

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

Wenn ich das oben genannte verwende, um dies zu ändern: Mein TextdateiformatName:Nr:Nr:Typ:p

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

angenommen $name = Tom, $P = 55,5

ich bekomme das:

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

Wenn ich jedoch versuche, den $P von 55,5 auf 41,5 zu ändern

es wird

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

Ich habe versucht :

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

Es ändert nur den Wert von :0 Wenn der Wert größer als 0 ist, ändert er sich überhaupt nicht. Angenommen, ich würde darauf bestehen, sed dafür zu verwenden. Habe ich es :an der falschen Position platziert? Ich versuche, den letzten Spaltenwert nach zu ändern:

Antwort1

Beantwortet in den Kommentaren:

Soweit ich weiß: muss hier nicht maskiert werden. Da . jedoch nicht im Bereich [0-9] liegt, stimmt das Muster [0-9]* nicht mit Dezimalzahlen wie 55,5 überein - Sie benötigen etwas wie [0-9.]*, also "/$name/s/:[0-9.]*$/:$P/"

verwandte Informationen