我正在尝试将包含该模式的行替换"s#_decoded_block["
为"s#_decoded_block_"
.我用来执行此操作的命令是
%s/s\d\+_decoded_block\[/s\d\+_decoded_block_/g
我希望得到"s#_decoded_block_"
替补,但我却得到了"sd+_decoded_block_"
。请让我知道我做错了什么。
答案1
您似乎期望问题中的“#”为十进制数。您可以使用反向引用来做到这一点:
%s/s\(\d\+\)_decoded_block\[/s\1_decoded_block_/g
其中\(\d\+\)
匹配一个或多个十进制数字并使用标记替换\1
。
您可以通过移动其中的更多文本来改进反向引用:
%s/s\(\d\+_decoded_block\)\[/s\1_/g
因为\1
将被组中匹配的任何内容替换。
答案2
不确定它是否完全适合您的用例,但看起来您也可以使用:
:g/s\d\+_decoded_block\[/ s/\[/_/
...除非有其他潜在的[
...除非匹配行中前你想要改变的那个。
越简单越好,如果它符合您的要求。