如何删除Vim中的第二列?
我有一个制表符分隔文件,如:
name1 verb1 name2 verb2 etc...
我想删除第二列。 我尝试编辑其中一个答案 ,但不熟悉sed
和awk
,我做不到。
谁能帮我?
在vim中,您应该能够使用该命令
:%s/\t[^\t]*//
(替换TAB后跟零个或多个出现的任何字符,除了TAB ,什么都没有)。 如果您的文件只有两列,您可以使用稍微简单的一点:%s/\t.*
或:%s/\t.*$
替换第一个TAB和任何后续字符,直到行尾。
接受的答案比这更优雅(我赞成它!)但如果你不记得它,你可以直接使用vim
视觉块模式 。 打开vim并转到(正常模式)到列的第一个角落,如下所示:
键入CTRL-V
,您可以移动光标以选择列,这是中途:
最后,按G
:
该块似乎被打破了,因为我们在最后一行是空白的; 只需向上一行(使用向上箭头或k
)再次看到它……:
现在您只需按x
即可删除该块:
我会用cut
这个
cut -f1,3- file.txt > newfile.txt mv newfile.txt file.txt
你也可以在vim中使用它作为filter(这将替换文件中的所有行;你也可以使用(例如) 2,9
而不是%
来处理第2-9行,或者选择你想要的行V
):
:%!cut -f1,3-
-f1,3-
表示’打印字段1,后跟字段3,所有字段直到行的末尾’。 默认情况下, cut
使用制表符作为其分隔符; 如果你需要其他东西,请使用-d
选项(参见man cut
)。
您可以尝试:
:%norm WdW
或手动使用视觉模式:
- 跳到第二列(例如按下: W )。
- 按Ctrl + v启动visual-block。
- 选择第二列(例如,按: W , G )。
- 按d删除它。
要从命令行就地执行此操作,请尝试:
$ ex +':exe ":%norm f\dE"' -scx file
相关: 如何为Tab键编写用于运动的文字?
也可以看看:
- 使用Visual Block模式删除VIM / gvim中的特定列