linux shell脚本使用sed替换特定分隔符后的值

linux shell脚本使用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 = Tom , $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/"

相关内容