2

vimエディターまたはsedコマンドを使用して最後の列の値を別の値に置き換えたいのですが、以下のコマンドを試しましたが、2番目の列にすでに存在するデータが置き換えられることがあります。

:%s/,3/,2/

私のサンプルデータ:

410339,166,1430,3
410340,112,1840,3
410341,109,1315,3
410342,123,1435,3
410343,230,3200,3
410344,857,36975,3
410345,125,4440,3
410346,105,1460,3
410348,122,1150,3
410349,314,2380,3
410350,132,4650,3
410351,136,7465,3
410352,103,1775,3
410353,101,1095,3
410354,101,1360,3
4

4 に答える 4

4

行末が必要であることを示す必要があります。

:%s/,3$/2/
于 2012-11-26T02:24:24.737 に答える
3

Vimでの試行を完了するには、一致した式を。で行の終わりに固定するだけ$です。

:%s/,3$/,2/

生産:

410339,166,1430,2
410340,112,1840,2
410341,109,1315,2
410342,123,1435,2
410343,230,3200,2
410344,857,36975,2
410345,125,4440,2
410346,105,1460,2
410348,122,1150,2
410349,314,2380,2
410350,132,4650,2
410351,136,7465,2
410352,103,1775,2
410353,101,1095,2
410354,101,1360,2
于 2012-11-26T02:24:19.947 に答える
3

私は使用しますawk

awk '{$NF=2}1' FS=, OFS=,

これにより、無条件で最後の列の値が2になります。必要な置換が文字列の場合は、引用符またはより柔軟なものを使用する必要があります。

awk '{$NF=r}1' FS=, OFS=, r="the string to put in the last column"

次のように、値が3の列への置換を制限できます。

awk '$NF==3{$NF=r}1' FS=, OFS=, r="the string to put in the last column"

そして、vimでこれを行うには、次のようにします。

:%! awk ...
于 2012-11-26T14:03:07.720 に答える
2

GNU sed

最後の列が「3」のみの場合:

sed -i 's/3$/2/' file

最後の列が「13」のようなものである可能性がある場合:

sed -i 's/,3$/,2/' file

-iフラグ:

-i[SUFFIX], --in-place[=SUFFIX]
    edit files in place (makes backup if extension supplied)
于 2012-11-26T02:39:26.710 に答える