我有一个包含数字和字母列的文件:
0.01182290 0.02526555 0.46794573 RING zinc finger protein putative 0105800 1076 1166 -90
Run Code Online (Sandbox Code Playgroud)
我想将字母之间的空格替换为下划线.
0.01182290 0.02526555 0.46794573 RING_zinc_finger_protein_putative 0105800 1076 1166 -90
Run Code Online (Sandbox Code Playgroud)
我是正则表达式的新手,替代字符串是[a-zA-Z]\s[a-zA-Z]
,但我无法确定替换是什么.我试过的一切都改变了空格之间的字母.
:%s/[a-zA-Z]\s[a-zA-Z]/??/g/
Run Code Online (Sandbox Code Playgroud)
一个更简单的替代方案是使用vim的匹配开始和匹配原子的结束(\zs
和\ze
):
:%s/\a\zs\s\ze\a/_/g
Run Code Online (Sandbox Code Playgroud)
分解:
:%s/
- 开始整个文件的替换命令\a
- 简写 [A-Za-z]
\zs
- 匹配字符串的开始\s
- 空格或标签\ze
- 匹配结束字符串\a
- 与上述相同/_/
- 用一个替换匹配字符串 _
g
- 对于线上的每次出现