在 vi 中用正则表达式搜索并替换?

在 vi 中用正则表达式搜索并替换?

我想用正则表达式替换出现在多行中且带有字符“x”的字符串:

问题是用前面的 x 替换 x 后面有一个整数的单词,例如在包含以下内容的文件中:

x44name
xjanname
x50name

例如:

:1,2s/x[0-9]name/num/g

我需要使用 sed 或其他命令来搜索和替换该单词吗?

出现以下错误:

E486: Pattern not found: x[0-9]name

答案1

如果你可以有任意数量的数字(包括 0),你应该这样做

:%s/x[0-9]*name/num/g

如果总是两个

:%s/x[0-9][0-9]name/num/g

当然你也可以使用\d代替[0-9]

:%s/x\d*name/num/g
  • %s表示搜索整个文件
  • s表示只搜索当前行

  • g表示给定行中的所有匹配项

  • 没有 g 表示仅替换每行的第一个匹配项

答案2

如果我理解正确的话,“num”是“x”之后的下一个数字,请明白这一点:

:%s/x\([0-9]\)/\1/g

相关内容