Text-Processing
Vim:基於該行中的另一個匹配替換
我有相當大的文件需要替換
NX
,N1
但前提是該行已經包含NX
作為模式。到目前為止,我通過首先搜尋出現的NX
with 手動完成:/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>
為原始文件。