Text-Processing

如何使用變數替換 vim 正則表達式

  • September 17, 2021

我有一個大文件,其中包含以下形式的幾行:

USet07-1
USet07-2
USet08-1
USet08-2
.
.
.
USet22-2
.
.
.

我想-vim. 我搜尋字元串:

:/USet\d\d-\d

但是當我嘗試用

:%s/Uset\d\d-\d/USet\d\d\d

我顯然得到

USetddd

對於所有情況。但我想要的是:

USet071
USet072
USet081
USet082
.
.
.
USet222
.
.
.

如何才能做到這一點?我可以重複使用部分匹配字元串並在替換中使用它嗎?

是的,您可以使用擷取組。基本上,你用等包裹模式的部分\(...\)並在替換部分中引用它\1

:%s/Uset\(\d\d\)-\(\d\)/USet\1\2

由於您只想刪除模式的單個部分,因此更短的選項是通過\zs(match start) 和\ze(match end) 限制實際匹配(但仍然斷言周圍的東西也存在):

:%s/Uset\d\d\zs-\ze\d//

這些都是非常基本的東西,擷取組在許多基於正則表達式的工具(如sed)中很常見。了解如何查找命令和導航內置:help;它很全面,並提供了許多提示。你不會像其他編輯器那樣快速學習 Vim,但如果你致力於持續學習,它將證明是一個非常強大和高效的編輯器。

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