首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在匹配Vim中的模式之后删除文本直到每一行的末尾?

如何在匹配Vim中的模式之后删除文本直到每一行的末尾?
EN

Stack Overflow用户
提问于 2015-09-16 08:27:26
回答 4查看 215关注 0票数 2

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

代码语言:javascript
复制
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内部,我尝试了以下几种方法:

代码语言:javascript
复制
:%s/.com $/.com/g
:%s/.com*$/.com/g
:%s/.com .*/.com/g

据我所知,这就是我所要做的:

代码语言:javascript
复制
:%s/ - search on all the file
.com .*/ - the search pattern
.com/ - the replace pattern
/g - global

但没有用,我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-09-16 08:36:54

代码语言:javascript
复制
:%s/[.]com.*/.com

这正是你所需要的。

%s搜索整个文件

/[.]com.*找到.com和其他直到行尾的东西

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

您不必在最后使用/g,因为在每一行中只有一个.com出现。

如果不希望将.company.com替换为.com,请使用以下命令

代码语言:javascript
复制
:%s/[.]com\>.*/.com
票数 2
EN

Stack Overflow用户

发布于 2015-09-16 16:20:47

我喜欢:normal来执行这类任务:

代码语言:javascript
复制
:%norm f D

但是,我们可以通过使用awkcut:%!进行过滤来做更多的*nix。

代码语言:javascript
复制
:%!cut -f1 -d' '
:%!awk '{print $1}'
:%!awk '$0=$1'

使用\zs的替换

代码语言:javascript
复制
:%s/\.com\zs.*

有关更多帮助,请参见:

代码语言:javascript
复制
:h :normal
:h f
:h D
:h :range!
:h /\zs
:h magic
票数 2
EN

Stack Overflow用户

发布于 2015-09-16 09:26:56

您还可以使用g

代码语言:javascript
复制
:g/[.]com\>/normal nelD

代码语言:javascript
复制
:g/[.]com/normal nelD

如你所愿。

它的工作如下:

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

n找到下一次匹配,e转到字尾,l移到右边,D删除到行尾。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32603341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档