
私はこれを持っています:
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/" が必要です。