16

我有一个文本文件,我想删除除每行第一个单词之外的每个单词,但我不知道该怎么做。

所以,如果我有:

one two three
four five
six

我想留在:

one
four
six

有什么想法吗?

4

3 回答 3

20

如果这些行不以空格开头,您可以用' .*'空字符串替换(匹配第一个单词之后的所有内容):

:%s/ .*//g
于 2012-12-15T10:29:16.443 回答
7

一个更强大的解决方案是通过一个非常擅长这些操作的程序来过滤它:awk.

假设您有以下内容:

one two three

  four five
            six

运行:%!awk '{print $1}',你会得到:

one

four
six

awk的默认字段分隔符是空格,但您可以根据需要将其更改为您想要的任何内容。

于 2012-12-16T19:42:50.477 回答
2

或者,您可以使用宏来完成。在正常模式下键入qa开始在寄存器 a 中录制宏。然后键入0elDj以删除当前行上除第一个单词之外的所有内容,然后转到下一行。再次键入q以结束录制宏。

现在您可以在任何带有@a. 运行:%norm! @a以将宏应用于缓冲区中的每一行。

通过这种方式,您可以重复任何您想要的复杂操作,而不仅仅是替换。我喜欢宏:)

编辑:请注意,当一行严格少于 2 个字符时,它不起作用。因此,这通常不是解决此问题的最佳方法。

于 2012-12-15T22:07:46.337 回答