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

相關內容