我在 vi 编辑器中打开了一个包含 9 列的文本,我喜欢用逗号替换第 9 列(最后一个)中的制表符,后跟一个空格。到目前为止,我想出了这个;
'2,$s#\(^.\{8\}\)\\t#\1\(\,\)#'
但这似乎不匹配任何东西......可能是我逃避了太多东西,但我也不知道您是否需要指定列分隔符(在这种情况下也是一个制表符)。对此的任何帮助将不胜感激。
%s/^\(\%(\t\?[^\t]\+\)\{8\}\)\t\(.*\)$/\1, \2/
这将替换 ( s
):
^
- 线的开始\(
开始(第 1 组)
\%(
内部组的开始
\t?
0 或多个s(以说明在行Tab首缺少 a )Tab[^\t]\+
后跟 1 个或多个Tab非\)
内组结束\{8\}
上述内组重复8次\)
结束(第 1 组)\t
其次是Tab\(.*\)
以及其他(第 2 组)$
直到行尾和:
\1
- (第 1 组)(直到 8号Tab),
- 逗号和空格\2
- (第 2 组)(从第 8Tab行到行尾的所有内容)在整个缓冲区 ( %
)。
如果这是一次性替换,您可以改用宏(从您希望更改的第一行的第一个字符开始):
qqfTab7;cl,SpaceEscj0q
其中按键如下:
然后使用@q播放下一行(或99@q播放接下来的 99 行等)。