如何在匹配Vim中的模式后删除文本直到每行结束?

如何在匹配Vim中的模式后删除文本直到每行结束?,vim,sed,Vim,Sed,我有一个包含以下内容的文件: domproxy1.dom.company.com Centos CentOS 6.5 production S5520UR 7 days ago Edit domproxy10.dom.company.com Centos CentOS 6.5 production S5520UR 7 days ago Edit domproxy11.dom.company.com Centos CentOS 6.5 production X8DTU 7

我有一个包含以下内容的文件:

domproxy1.dom.company.com  Centos CentOS 6.5 production  S5520UR   7 days ago  Edit
domproxy10.dom.company.com Centos CentOS 6.5 production  S5520UR   7 days ago  Edit
domproxy11.dom.company.com Centos CentOS 6.5 production  X8DTU   7 days ago  Edit
domproxy15.dom.company.com Centos CentOS 6.6 production  X8DTU   8 days ago  Edit
domproxy2.dom.company.com  Centos CentOS 6.5 production  S5520UR   7 days ago  Edit
domproxy3.dom.company.com  Centos CentOS 6.5 production  S5520UR   7 days ago  Edit
domproxy4.dom.company.com  Centos CentOS 6.5 production  S5520UR   7 days ago  Edit
domproxy5.dom.company.com  Centos CentOS 6.5 production  S5520UR   7 days ago  Edit
domproxy6.dom.company.com  Centos CentOS 6.5 production  S5520UR   7 days ago  Edit
domproxy9.dom.company.com  Centos CentOS 6.5 production  S5520UR   7 days ago  Edit
domproxy29.dom.company.com Centos CentOS 6.6 production  S2600GZ   about 1 month ago Edit
orgcmsui03.nj.company.com  Centos CentOS 6.6 production  Virtual Mac...    6 days ago  Edit
domftp01.dom.company.com Centos CentOS 6.4 production  ProLiant DL...    40 minutes ago  Edit
我想用
(.com)
替换每行的
(.com*)
,这意味着删除每行主机名之后的所有内容

在vim内部,我尝试了以下方法:

:%s/.com $/.com/g
:%s/.com*$/.com/g
:%s/.com .*/.com/g
据我所知,这就是我正在做的:

:%s/ - search on all the file
.com .*/ - the search pattern
.com/ - the replace pattern
/g - global
但是没有用,我做错了什么

:%s/[.]com.*/.com
这正是你所需要的

%s
搜索整个文件

/[.]com.*
查找
.com
以及后续内容,直到行尾

/.com
将搜索的模式替换为
.com

:%s/[.]com\>.*/.com
您不必在结尾使用
/g
,因为每行中只出现一次
.com

如果您不想将
.company.com
替换为
.com

:%s/[.]com\>.*/.com
您也可以使用

如你所愿

其工作原理如下:

在每行中查找
.com
,并在正常模式下执行命令
nelD

n
查找下一个匹配项,
e
转到单词末尾,
l
向右移动,
D
删除到行尾。

我会这样做:

:%s/\.com\zs\s.*/
匹配
dot'com'空白
(例如空格或制表符),删除
dot'com
之后的所有内容


注意:点被转义,否则任何字符都匹配。

对于此类任务,我喜欢
:normal

:%norm f D
但是,我们可以通过使用
awk
cut
通过使用
:%进行过滤来做更多的事情*nix-y

:%!cut -f1 -d' '
:%!awk '{print $1}'
:%!awk '$0=$1'
使用
\zs
替换:

:%s/\.com\zs.*
有关更多帮助,请参阅:

:h :normal
:h f
:h D
:h :range!
:h /\zs
:h magic

谢谢,伙计,这正是我需要的。总有一天我会明白这一切是如何运作的:)你可以马上明白!我将编辑我的答案。可能
:%s/[.]com.*/.com
以避免松开
my.servercom.org
,因为没有类似于“my.servercom.org”的命令。给定的命令在此上下文中工作正常。但是,你是绝对正确的!我将编辑我的答案。
.company.com
变成了
.com
,但显然,这就是OP想要的+我不知道为什么他自己的
%s/.com.*/.com/g
对他不起作用?或者甚至只是
:%norm f d-
胖手指-那应该是
%norm f d$
多留一个字符<代码>:%norm f D
:开发更好:)
f
查找第一个空格,而不是
.com
,但对于OP提供的示例,这正是所需的。我删除了那条评论。没有注意到第一个空格在
.com
:h :normal
:h f
:h D
:h :range!
:h /\zs
:h magic