我想使用Vim匹配正则表达式并执行替换.我有一个tsv文件,其行如下所示:
rs11223-A -A
rs23300-G -TTA
rs9733-T -G
rs11900000-GT -TTG
Run Code Online (Sandbox Code Playgroud)
我希望仅在rs之后的第一列中用短划线( - )字符替换选项卡...
在Vim中,我尝试使用以下方法执行替换:
:%s/(?<=^rs[0-9]{1,12})-/\t/g
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我的问题是什么和正确的解决方案?
Jay*_*Jay 21
它可能取决于配置,但在我的环境中,我必须先{ , }添加\.
此外,Vim有\zs和\ze开始和结束匹配,因此你通常不必应付正常的正则表达式环视.
这样做你想要的:
:%s/^rs\d\{1,12}\zs-/\t/g
Run Code Online (Sandbox Code Playgroud)
正面看后面是使用:
\@<=
Run Code Online (Sandbox Code Playgroud)
所以你可以使用类似的东西:
:%s/\d\@<=-/\t/g
Run Code Online (Sandbox Code Playgroud)
您的实际数据可能更复杂,但是您发布的内容也可以满足:
:%s/-/\t
Run Code Online (Sandbox Code Playgroud)
如果rs应该在行的开头,您可以使用\zs指定匹配的开始并使用anchoring(^):
:%s/^rs\d*\zs-/\t
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4417 次 |
| 最近记录: |