我想使用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
答案 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)