Vim

匹配所有包含一個字元串的字元串,後跟一個點,然後是 Vim 中的兩個字母?

  • November 27, 2021

例如,我們有一個包含各種域名的文件,大約 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

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