【发布时间】:2012-12-03 04:53:45
【问题描述】:
我有一个文本文件,我想删除除每行的第一个单词之外的所有单词,但我不知道该怎么做。
所以,如果我有:
one two three
four five
six
我想留下来:
one
four
six
有什么想法吗?
【问题讨论】:
我有一个文本文件,我想删除除每行的第一个单词之外的所有单词,但我不知道该怎么做。
所以,如果我有:
one two three
four five
six
我想留下来:
one
four
six
有什么想法吗?
【问题讨论】:
如果行不以空格开头,您可以将' .*'(匹配第一个单词之后的所有内容)替换为空字符串:
:%s/ .*//g
【讨论】:
或者,您可以使用宏来实现。
在正常模式下键入qa 开始在寄存器a 中录制宏。
然后键入0elDj 删除当前行上除第一个单词之外的所有内容,然后转到下一行。
再次输入q 结束宏录制。
现在您可以使用@a 在任意行触发宏。
运行:%norm! @a 将宏应用到缓冲区中的每一行。
通过这种方式,您可以重复任何您想要的复杂操作,而不仅仅是替换。 我喜欢宏:)
编辑:请注意,当一行严格少于 2 个字符时,它不起作用。因此,这通常不是解决此问题的最佳方法。
【讨论】:
更强大的解决方案是通过一个非常擅长此类操作的程序对其进行过滤:awk。
假设你有这个内容:
one two three
four five
six
运行:%!awk '{print $1}',你会得到:
one
four
six
awk 的默认字段分隔符是空格,但您可以根据需要将其更改为您想要的任何内容。
【讨论】: