我有一个大文件,其中包含以下格式的服务器行:
USet07-1
USet07-2
USet08-1
USet08-2
.
.
.
USet22-2
.
.
.
我想-
从中的这些字符串中删除连字符/破折号vim
。我用以下命令搜索字符串:
:/USet\d\d-\d
但是当我尝试用
:%s/Uset\d\d-\d/USet\d\d\d
我显然得到了
USetddd
对于所有实例。但是我想要的是:
USet071
USet072
USet081
USet082
.
.
.
USet222
.
.
.
如何才能做到这一点?我可以重用匹配字符串的一部分并将其用于替换吗?
是的,您可以使用捕获组。基本上,您使用来包装模式的各个部分,\(...\)
并使用\1
etc来引用替换部分中的样式:
:%s/Uset\(\d\d\)-\(\d\)/USet\1\2
由于您只想删除模式的单个部分,因此一个较短的选项是通过\zs
(匹配开始)和\ze
(匹配结束)限制实际匹配(但仍然断言周围的东西也存在):
:%s/Uset\d\d\zs-\ze\d//
这些都是非常基本的东西,捕获组在许多基于正则表达式的工具(如sed
)中很常见。了解如何查找命令和导航内置命令:help
;它是全面的,并提供了许多技巧。学习Vim的速度不会像其他编辑器那样快,但是如果您坚持不懈地学习,它将证明它是一个功能强大且高效的编辑器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句