我有一个包含以下内容的文件:
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但没有用,我做错了什么?
发布于 2015-09-16 08:36:54
:%s/[.]com.*/.com这正是你所需要的。
%s搜索整个文件
/[.]com.*找到.com和其他直到行尾的东西
/.com将搜索的模式替换为.com
您不必在最后使用/g,因为在每一行中只有一个.com出现。
如果不希望将.company.com替换为.com,请使用以下命令
:%s/[.]com\>.*/.com发布于 2015-09-16 16:20:47
我喜欢:normal来执行这类任务:
:%norm f D但是,我们可以通过使用awk或cut对:%!进行过滤来做更多的*nix。
:%!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发布于 2015-09-16 09:26:56
您还可以使用g
:g/[.]com\>/normal nelD或
:g/[.]com/normal nelD如你所愿。
它的工作如下:
在每一行中,查找.com并以正常模式执行命令nelD。
n找到下一次匹配,e转到字尾,l移到右边,D删除到行尾。
https://stackoverflow.com/questions/32603341
复制相似问题