
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/"