Text-Processing

Vim:基於該行中的另一個匹配替換

  • April 5, 2015

我有相當大的文件需要替換NXN1但前提是該行已經包含NX作為模式。到目前為止,我通過首先搜尋出現的NXwith 手動完成:

/NX

然後使用

'<,'>s/N1/NX

但是文件真的很大很長,我在這個手動過程中出錯的可能性非常高。有沒有辦法在 Vim 中更有效地做到這一點?

以下是其中一個文件中的一行的範例:

S22Tg    K1B12N1Tg    D1AE22K5    K2B12N1Tg    D1AE22K6    W01B12N1Tg    D1AE22TDNXW01    W02B12N1Tg    D1AE22TDNXW02    W03B12N1Tg

請注意,這些行都非常相似,僅在字母后出現的數字方面有所不同。

在 Vim 中,您可以將替換限制為包含以下內容的行NX

:g/NX/s/N1/NX/

替換之前的 with/NX/使得 Vim 只在包含的下一行執行它NX(使用range),而 using:g使得它在所有匹配的行上執行NX

您不一定需要在 vim 中打開文件來執行此操作。您可以在命令行上執行此操作 sed '/NX/s/N1/NX/g' <filename> >> <newfilename> ,然後將其重命名<newfilename>為原始文件。

引用自:https://unix.stackexchange.com/questions/194458