用另一个值替换unix文件中的最后一列

时间:2012-11-26 02:19:25

标签: unix vim replace sed

我想使用vim编辑器或sed命令将最后一列值替换为另一个值。我尝试了下面的命令,但它有时会替换我第二列中已经存在的数据。

:%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 个答案:

答案 0 :(得分:4)

您需要表明您想要行尾:

:%s/,3$/2/

答案 1 :(得分: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

答案 2 :(得分: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 ...

答案 3 :(得分: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)