如何在匹配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