Vim:根据该行中的另一场比赛进行替换

lor*_*age 0 vim text-processing regular-expression

我有相当大的文件,我需要替换其中的文件NXN1但前提是该行已经包含NX作为模式。到目前为止,我通过首先搜索NXwith 的出现来手动执行此操作:

/NX
Run Code Online (Sandbox Code Playgroud)

然后使用

'<,'>s/N1/NX
Run Code Online (Sandbox Code Playgroud)

但这些文件确实又大又长,我在这个手动过程中犯错误的可能性非常高。有没有办法在 Vim 中更有效地做到这一点?

以下是其中一个文件中的一行的示例:

S22Tg    K1B12N1Tg    D1AE22K5    K2B12N1Tg    D1AE22K6    W01B12N1Tg    D1AE22TDNXW01    W02B12N1Tg    D1AE22TDNXW02    W03B12N1Tg
Run Code Online (Sandbox Code Playgroud)

请注意,这些行都非常相似,仅在字母后面出现的数字方面有所不同。

mur*_*uru 5

在 Vim 中,您可以将替换限制为包含以下内容的行NX

:g/NX/s/N1/NX/
Run Code Online (Sandbox Code Playgroud)

在替换之前/NX/使用 使得 Vim 仅在包含 的下一行上执行它NX(使用范围),而使用 则:g使其在所有匹配 的行上运行NX