我有一个包含以下内容的文件:
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
但无济于事,我做错了什么?
答案 0 :(得分:2)
:%s/[.]com.*/.com
这将完全符合您的需要。
%s
搜索整个文件
/[.]com.*
查找.com
以及随后的内容直到行尾
/.com
用.com
您不必在最后使用/g
,因为每行只有一次.com
。
如果您不希望.company.com
替换.com
,请使用以下命令
:%s/[.]com\>.*/.com
答案 1 :(得分:2)
我喜欢: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
答案 2 :(得分:1)
您还可以使用power of g
:g/[.]com\>/normal nelD
或
:g/[.]com/normal nelD
如你所愿。
它的工作原理如下:
在每一行中找到.com
并在正常模式下执行命令nelD
。
n
找到下一个匹配,e
转到单词结束,l
向右移动,D
删除直到行尾。
答案 3 :(得分:1)
我这样做:
:%s/\.com\zs\s.*/
匹配dot 'com' whitespace
(例如空格或标签),删除 dot com
之后的所有。
注意: dot 已转义,否则任何字符匹配。