1

我想在文件中替换;,

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 替换来替换。但是,我不知道如何在这种情况下更换。

4

4 回答 4

4

简短的回答:

:%s/(\d*);(\d*);(\d*)$/\1,\2,\3/gc

解释:

%s/search/replace/gc- 将找到所有搜索实例并将它们替换为替换。最后的 c 使得 vi 会提示您进行每次更改

\(\d*\);\(\d*\);\(\d*\)- 直到你击中分号为止的数字,三遍。转义的括号将捕获输出

\1,\2,\3- 转义数字为您提供我们在搜索字符串中捕获的数据

于 2013-02-15T13:38:10.410 回答
1

假设所有“;” 在数字之间:

:%s/\(\d\);\(\d\)/\1,\2/g

或者,如果您正在寻找“;” 前面没有空格

:%s/ \@<!;/,/g
于 2013-02-15T13:40:46.917 回答
1
:%s#\([^ ]\);\([^ ]\)#\1,\2#g

解释:

%每一行中应用命令。

替换命令不关心您使用哪个分隔符。它使用 . 之后的第一个字符s。当使用(很多)反斜杠时,我使用 eg #

它需要 ("not-a-space" ; "not-a-space") 并将其替换为 (that 1st "not-a-space" , 2nd "not-a-space")

g在行尾使其替换每行的所有出现(不仅仅是第一个)

于 2013-02-15T13:44:00.000 回答
1

比利答案的变体,匹配“一个或多个”数字而不是“0 或多个”:

:%s/\v(\d+);(\d+);(\d+)/\1,\2,\3

另一个匹配“至少 2”位数字:

:%s/\v(\d{2,});(\d{2,});(\d{2,})/\1,\2,\3
于 2013-02-15T13:45:28.970 回答