我的数据形式如下:
id|name|things that I don't care
Run Code Online (Sandbox Code Playgroud)
所以对于每一行,我想在第二个|符号后删除文本.
如何使用一个命令在Vim中执行此操作?
编辑:
在第二个之后实际上有额外的管道|,因为它|被用作列的分隔符.
Joh*_*web 19
一个解决方案
:%s!^\([^|]*|\)\{2\}\zs.*!!
Run Code Online (Sandbox Code Playgroud)
说明:
%:在每一行s:替补!:模式的开始^:开始行\(:小组的开始[^|]*:任意数量的非管道字符|:接下来是管道\):小组结束\{2\}:匹配该组的两个计数\zs:在这里开始模式匹配.*:任何角色!:模式结束并开始更换!:更换结束这将使不到两个管道的线路保持不变,并且还将处理具有多于两个管道的线路......
之前
id name things that I don't care no pipes
id|name things that I don't care one pipe
id|name|things that I don't care two pipes
id|name|things that I don't care extra pipe at line end|
id|name|things that I don't care | extra pipe mid-line
id|name|things that I don't| care| two extra pipes
name|things that I don't care missing first column and pipe
|name|things that I don't care missing first column
Run Code Online (Sandbox Code Playgroud)
之后:
id name things that I don't care no pipes
id|name things that I don't care one pipe
id|name|
id|name|
id|name|
id|name|
name|things that I don't care missing first column and pipe
|name|
Run Code Online (Sandbox Code Playgroud)
ib.*_*ib. 11
可以简单地重复正常模式命令,该命令跳转到第二个|符号旁边的字符并删除直到每行的行尾.
:%norm!2f|lD
Run Code Online (Sandbox Code Playgroud)