如何在 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\)\[/_/
在这种情况下,我捕获了您想要保留的全部内容,这样就不必重新输入了。
我正在尝试将包含模式 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\)\[/_/
在这种情况下,我捕获了您想要保留的全部内容,这样就不必重新输入了。