介紹如何使用 Vim 的正規表示法進行搜尋,並將符合條件的資料整行刪除。
搜尋並刪除符合的行
如果要在 Vim 編輯器中以正規表示法進行搜尋,並將符合條件的行(line)刪除,可以使用 g
指令搜尋,然後搭配結尾的 d
來刪除所有符合的行。
例如搜尋 dog
這個字眼,並將所有含有 dog
字眼的行都刪除:
:g/dog/d
這裡我們可以自由運用各種正規表示法進行匹配,例如要將含有 dog
或 fog
字眼的行都刪除,可以執行:
:g/[df]og/d
若要將含有 dog
或 cat
字眼的行刪除,可以執行:
:g/dog\|cat/d
匹配完整單字
若直接以 dog
這個簡單的字眼進行匹配,也會同時匹配到 doggy
這類包含 dog
的單字,如果只想要搜尋 dog
這個單字,排除 doggy
,可以在前後加上單字邊界的條件,這樣就可以只匹配到 dog
這個單字了:
:g/\<dog\>/d
執行這一行指令之後,就只會把含有 dog
這個單字的行刪除,而含有 doggy
的行則不受影響。
刪除空白行
若要刪除檔案中所有的空白行,可以執行:
:g/^$/d
上面這一行指令只會刪除完全空的行,如果一行中含有空白字元或 tab 字元,就會被保留。
如果希望將只有空白字元或 tab 字元的行都一起刪除,可以改用這一行指令:
:g/^\s*$/d
搜尋並只保留符合的行
如果想要把符合搜尋條件的行保留下來,刪除其他所有沒有符合的行,可以在搜尋條件之前加上驚嘆號(!
),以反向匹配的方式處理。
例如若要只保留含有 dog
字眼的行,將其他的所有行都刪除,就可以執行:
:g!/dog/d
若要只保留含有 dog
或 cat
字眼的行,將其他的所有行都刪除,就可以執行:
:g!/dog\|cat/d
處理範圍
若只要針對檔案中的特定幾行進行處理,可以在開頭的 g
之前指定行的範圍。
例如只要針對第 1 行到第 15 行,將含有 dog
字眼的行刪除,則可執行:
:1,15 g/dog/d
在指定行範圍時,可以使用錢字號($
)來代表檔案中的最後一行。
例如若要針對第 30 行之後到檔案的最後一行,將含有 dog
字眼的行刪除,則可執行:
:30,$ g/dog/d