Regex 如何使用VIM删除第一个字符串结束后的所有字符串?

Regex 如何使用VIM删除第一个字符串结束后的所有字符串?,regex,vim,Regex,Vim,我有一个5174行的文件。以下是这些行的显示方式: JAMES 1.664 1.664 1 约翰1.6423.305 2 罗伯特1.576 4.881 3 迈克尔1.321 6.202 4 玛丽1.319 7.5215 威廉1.230 8.750 6 大卫1.1859.934 7 理查德0.854 10.788 8 查尔斯0.765 11.552 9 约瑟夫0.70512.25710 托马斯0.692 12.948 11 帕特里夏0.539 13.486 12 克里斯托弗0.51914.005

我有一个5174行的文件。以下是这些行的显示方式:

JAMES 1.664 1.664 1
约翰1.6423.305 2
罗伯特1.576 4.881 3
迈克尔1.321 6.202 4
玛丽1.319 7.5215
威廉1.230 8.750 6
大卫1.1859.934 7
理查德0.854 10.788 8
查尔斯0.765 11.552 9
约瑟夫0.70512.25710
托马斯0.692 12.948 11
帕特里夏0.539 13.486 12
克里斯托弗0.51914.005 13
琳达0.51814.52314
芭芭拉0.490 15.013 15
我在VIM中使用:

:s/^\s*//g

这不起作用。如何删除每行第一个字符后的所有字符?

您可以在vim中使用此选项:

:%s/\([^[:blank:]]\+\).*/\1/

\([^[:blank:][]\+\)
将在第一个空格前匹配和分组文本,而后面的引用将替换该空格。\1将有多种方法可以剥除这只猫的皮

替换为:

:%s/\w\+\zs.*
:正常

:%norm! f D

您已经有了解决方案,但宏也可以作为一种方法:

qqelDj0q

  • qq开始在
    q
    寄存器中录制宏
  • 在单词的末尾加一个字符
  • D删除行的末尾
  • j0在底线的开头
  • 停止录制宏

然后您可以执行
5174@q
在正常模式下重播5174次宏并删除所有行。

输出?我不知道你是想要
J
还是
JAMES
作为第一行。你能纠正我在JAMES开头和结尾添加这些字符的错误吗?那么,让我看看我是否理解正确:%s是搜索和替换,([^[:blank:]\+).*是否以1个或多个空格开头,后跟任意字符0次或多次,\1表示与第一个字符串中转义括号中的字符串相同?我单击了向上箭头,但我需要15或更高的声誉。我有一个新账户,那么,我怎么才能把这个标记为已回答?你对我问题的第二部分有什么想法吗?你能纠正我错误地将这些字符添加到詹姆斯的开头和结尾吗?我问了一个新问题。你能纠正我错误地将这些字符添加到詹姆斯的开头和结尾吗?