Скрипт оболочки Linux, заменяющий значение после определенного разделителя с помощью sed

Скрипт оболочки Linux, заменяющий значение после определенного разделителя с помощью sed

у меня есть это :

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

Когда я использую вышеизложенное, чтобы изменить это: Формат моего текстового файлаимя:нет:нет:тип:p

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

предположим, что $name = Том, $P = 55,5

я понимаю это:

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

Однако если я попытаюсь изменить $P с 55,5 до 41,5

это становится

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

Я пытался :

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

Он изменяет только значение из :0 Если значение больше 0, оно вообще не изменится. Предполагая, что я буду настаивать на использовании sed для этого. Я поместил :в неправильное положение? Я пытаюсь изменить последнее значение столбца после:

решение1

Ответил в комментариях:

AFAIK: здесь экранировать не нужно. Однако, поскольку . не находится в диапазоне [0-9], шаблон [0-9]* не будет соответствовать десятичным числам, таким как 55.5 - вам понадобится что-то вроде [0-9.]*, например "/$name/s/:[0-9.]*$/:$P/"

Связанный контент