
у меня есть это :
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/"