我想将;
替换为文件中的,
。
Query ; Query Time ; Lock Time ; Rows Examined
Closed User Count ; 19.530083 ; 0.000090 ; 64;49;246
预期产出:
Query ; Query Time ; Lock Time ; Rows Examined
Closed User Count ; 19.530083 ; 0.000090 ; 64,49,246
我使用vim替换来替换。但是,我不知道如何在这种情况下取代。
答案 0 :(得分:4)
简短回答:
:%s /(\ d *);(\ d *);(\ d *)$ / \ 1,\ 2,\ 3 / gc
说明:
%s/search/replace/gc
- 将找到所有搜索实例并将其与替换进行交换。最后的c使得vi会提示你进行每次更改
\(\d*\);\(\d*\);\(\d*\)
- 直到你打了分号三次之前的数字。逃脱的parens将捕获输出
\1,\2,\3
- 转义的数字会为您提供我们在搜索字符串中捕获的数据
答案 1 :(得分:1)
假设所有“;”在数字之间:
:%s/\(\d\);\(\d\)/\1,\2/g
或者如果你正在寻找“;”不在空格之前
:%s/ \@<!;/,/g
答案 2 :(得分:1)
:%s#\([^ ]\);\([^ ]\)#\1,\2#g
说明:
%
适用于每一行的命令。
替换命令不关心您使用哪个分隔符。它使用s
之后的第一个字符。当使用(很多)反斜杠时,我使用例如#
。
需要(“非空间”;“非空间”)并将其替换为(第一个“非空间”,第二个“非空间”)
该行末尾的 g
使其替换每行的所有出现(不仅仅是第一行)
答案 3 :(得分:1)
Billy的答案变体与“一个或多个”数字相匹配,而不是“0或更多”:
:%s/\v(\d+);(\d+);(\d+)/\1,\2,\3
和另一个匹配“至少2”数字的人:
:%s/\v(\d{2,});(\d{2,});(\d{2,})/\1,\2,\3