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

Linuxシェルスクリプトは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/"

関連情報