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

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

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

/NX

然后使用

'<,'>s/N1/NX

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

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

S22Tg    K1B12N1Tg    D1AE22K5    K2B12N1Tg    D1AE22K6    W01B12N1Tg    D1AE22TDNXW01    W02B12N1Tg    D1AE22TDNXW02    W03B12N1Tg

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

答案1

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

:g/NX/s/N1/NX/

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

答案2

您不一定需要在 vim 中打开文件才能执行此操作。您可以在命令行上执行此操作 sed '/NX/s/N1/NX/g' <filename> >> <newfilename> ,然后将其重命名<newfilename>为原始文件。

相关内容