我想使用vim删除文本文件的第一列。 我读了这些使用视觉模式的SO answers,但是他们只删除了第一个字符(对于使用模式的答案,我不理解它们,所以我很难适应我的情况)。
我的文件包含很多数字,我想删除第一列中的数字,而不仅仅是第一个元素。
例如
12 34 43143 1
131234 1
1 3443 132
我想
34 43143 1
1
3443 132
但是目前,我得到
2 34 43143 1
31234 1
3443 132
如果重要,则数字由制表符分隔
答案 0 :(得分:4)
(整数)数字在正则表达式语法中由[0-9]
表示,您也可以编写\d
;由于有许多数字,因此附加量词\+
。标签为\t
,或通常为空格为\s
。现在,您想要在行的开头(:substitute
)替换/ ^
数字。
:%s/^\d\+\t//
%
将此值应用于整个缓冲区,请参阅:help :range
。
很快,您将要删除不同的列;您可以断言某些匹配(例如^\d\+\t\zs\d\+\t
将选择第二列),或使用捕获组(您甚至可以使用它重新排序列!)但它会更加乏味。
当您意识到您的文件格式以名称制表符分隔值(逗号分隔值(CSV)的变体)众所周知时,就会发生突破。有一个很棒的插件(csv.vim - A Filetype plugin for csv files,它有一个:DeleteColumn
命令 - 正是你需要的!(还有更多...)
答案 1 :(得分:3)
测试此:%s/\v^\d*\s//g
,如果\s
是制表符分隔符,则可以将\t
替换为<{p}},
\v
代表非常神奇,它没有打开,所以基本上它不是默认的,它用于避免掩盖括号(&#34;(&#34;),大括号(&#34) ; {&#34;)等带有斜杠,\d
代表数字,*代表0或更多次匹配,\s
代表空格,%代表当前文件,{{1代表搜索当前文件,%s
代表全局替代,顺便说一下carret(g
)代表行的开头,在这种情况下你不必使用{ {1}}和^
,但我仍然使用它。
修改强>
所以这非常好:\v
,感谢Jeff
您可以使用vim帮助,例如
g
e.t.c获取正式定义
答案 2 :(得分:2)
另一种选择是使用宏:
qq0dawjq
然后你必须使用以下宏: @q 或 3 @ q 或任意数字+ @q
说明:
q: Start Recording a Macro
q: Save the macro in register q
0: Go to the beginning of the line
daw: Delete A Word
j: Move down to the next line
q: Finish the recording
答案 3 :(得分:2)
这是cut
的工作!
:%!cut -f 2-
答案 4 :(得分:1)
你必须输入
:%s/\d\+\t//