如何在 vi 中用特定模式替换一行?

How to replace a line with a certain pattern in vi?

我正在尝试将包含模式 s#_decoded_block[ 的行替换为 s#_decoded_block_。我用来执行此操作的命令是 %s/s\d\+_decoded_block\[/s\d\+_decoded_block_/g

我希望得到 s#_decoded_block_ 作为替换,但我得到的是 sd+_decoded_block_。请让我知道我做错了什么。谢谢。

问题是\d+只在搜索文本中有意义,在替换文本中没有意义。如果您想捕获匹配的内容然后在替换文本中使用它,您需要一个匹配组:

%s/\(s\d+_decoded_block\)\[/_/

在这种情况下,我捕获了您想要保留的全部内容,这样就不必重新输入了。