仅在 Vim 中的匹配搜索中替换字符串

Ped*_*dsB 3 vi vim

我知道你可以使用 Vim 替换文件中的某些模式:

:%s/<pattern>/<replacement>/g
Run Code Online (Sandbox Code Playgroud)

我想要做的是仅在辅助搜索匹配的情况下执行模式替换,例如:如果我的文件中有以下几行:

00_sub_5_train
01_sub_6_train
02_sub_5_train
03_sub_9_train
04_sub_8_train
05_sub_5_train
06_sub_5_train
Run Code Online (Sandbox Code Playgroud)

我想执行::%s/train/not_train/g仅在找到字符串“sub_5”的行上执行,剩下的就是:

00_sub_5_not_train
01_sub_6_train
02_sub_5_not_train
03_sub_9_train
04_sub_8_train
05_sub_5_not_train
06_sub_5_not_train
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Ven*_*n R 5

您可以直接应用如下模式。您可以使用sub_5_train完全应用该模式

:%s/sub_5_train/sub_5_not_train/g
Run Code Online (Sandbox Code Playgroud)

根据评论,如果您在 sub_5 后将有不同的内容,您可以进行条件替换,如下所示:

:g/sub_5/ s/train/not_train
Run Code Online (Sandbox Code Playgroud)

在这里,如果我们找到 sub_5,我们将仅替换该行。

基本上,我正在尝试使用如下所示的 g 命令。在这里,对于cmd,我使用替换命令。更多关于 vim g 命令

:[range]g/pattern/cmd
Run Code Online (Sandbox Code Playgroud)