使用任何流编辑器(或 vim),是否有一种快速、高效而简单的方法进行替换,但仅限于已经匹配的模式内。例如:
将所有参数“foo”替换为“bar”,但仅限于函数“func”:
test(foo, baz) func(foo) truc(foo) func(test, foo)
->
test(foo, baz) func(bar) truc(foo) func(test, bar)
首先搜索:/func\((.*)\)/
...然后,在捕获的组(或至少是完整匹配)中,执行s/foo/bar/g
注:我已阅读使用 sed 替换更大模式中的两个模式
但我正在寻找一种更简单的方法,不一定使用 sed
答案1
使用 Notepad++ 编辑器,它也可以与 SublimeText (至少 V3.0) 一起使用:
- Ctrl+H
- 找什么:
\bfunc\([^)]*\K\bfoo\b
- 用。。。来代替:
bar
- 取消勾选匹配大小写
- 检查环绕
- 检查正则表达式
- Replace all
解释:
\bfunc\( # literally func(, word boundary to avoid abcfunc
[^)]* # 0 or more not closing parenthese
\K # forget all we have seen until this position
\bfoo\b # foo surrounded with word boundaries
给定示例的结果:
test(foo, baz) func(bar) truc(foo) func(test, bar)