Vim
匹配所有包含一個字元串的字元串,後跟一個點,然後是 Vim 中的兩個字母?
例如,我們有一個包含各種域名的文件,大約 800 行。我們想使用 vim 快速找到所有以 www.example.** 開頭的域名,其中 ** 是任何類型的 2 個字母。
example.site" example.link]" example.example' example.ex' example.xx]"'
現在我們可以在 vim 中使用 term 進行搜尋
example.
,但是我們如何使用萬用字元來匹配,所以我們可以example.ex' and example.xx]"
在上面的範例中找到?我們不想突出顯示字元串
> example.site" > example.link]" > example.example'
只是
example.ex and example.xx
(如果我們可以刪除所有其他字元串並留下唯一匹配的字元串會更好)
你可以使用:
/example\.\w\w\W
搜尋“範例”。後跟兩個“單詞字元”
\w
,然後是一個“非單詞字元”\W
要刪除所有與模式不匹配的行,您可以執行以下操作:
:v/example\.\w\w\W/delete
要不就:
:v/example\.\w\w\W/d
或使用 g
$$ lobal $$帶否定的命令
!
::g!/example\.\w\w\W/d
上面的 3 個命令都會變成這樣:
example.site" example.link]" example.example' example.ex' example.xx]"'
進入這個:
example.ex' example.xx]"'
更新
對於處理這些模式在同一行的情況,如下所示:
example.site" example.example' example.ex' example.link]" example.xx]"'
您可以使用這樣的搜尋模式:
/example\.\w\w\w[^ ]* \?
它的工作方式是找到“例子”。後跟三個“單詞字元”,後跟任意數量的非空格字元,
[^ ]*
並以可選空格結尾\?
。因此,您可以用任何內容替換匹配項(這
g
意味著對行上的每個匹配項應用此替換,而不僅僅是它找到的第一個匹配項)::%s/example\.\w\w\w[^ ]* \?//g
要得到:
example.ex' example.xx]"'
(您也可以使用 刪除空行
:g/^$/d
。實際上,您可以使用 將其連結在一起,|
並與 一起完成所有操作:%s/example\.\w\w\w[^ ]* \?//g | %g/^$/d
)