Linux シェル スクリプトで sed を使用して特定の区切り文字の後の値を置き換える

Linux シェル スクリプトで sed を使用して特定の区切り文字の後の値を置き換える

私はこれを持っています:

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

上記を使用してこれを変更すると:テキストファイル形式名前:no:no:タイプ: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

コメントで回答:

私の知る限り、: はここではエスケープする必要はありません。ただし、. は [0-9] の範囲外なので、パターン [0-9]* は 55.5 のような小数には一致しません。[0-9.]* のようなパターン、つまり "/$name/s/:[0-9.]*$/:$P/" が必要です。

関連情報