Regular-Expression

vi 搜尋範圍和替換

  • September 17, 2017

我在不允許我使用這些方法vi的 Tru64 系統上使用。\1

這麼簡單的問題我找不到答案:

您如何將搜尋(範圍)與替換連接起來?看起來像這樣的東西,但它不起作用:

:/^group/s/\w$/Test/

對於那些感興趣的人,我試圖這樣做\1

:%s/\(group\s\+\)\w/\1Test/

這裡的主要問題是使用速記符號\w\s. 如果編輯器是(Bill Joy 的原始來源)的傳統實現vi,那麼可能還需要設置magic在大多數現代實現中預設設置的選項vi。這是用:set magic.


vi不理解\w\s類似的各種字元類的速記符號vim

要在 中進行替換vi,請使用

:%s/^\(group[  ][  ]*\)[0-9A-Za-z_]/\1Test/

根據文件,對應於並且vim是空格或製表符(上面都有空格和製表符)。\w``[0-9A-Za-z_]``\s``[ ]

E+模式,其中是E一些表達式,可以替換為EE*

替換的\1替換部分應該在vi(any vi) 中工作。如果沒有,請嘗試nvi(“new vi”) 或查看是否能夠安裝vim.

原始文件(至少在某些 BSD 系統上vi打包)需要對其“特殊字元”(除了和)進行轉義,例如等。或者,您可以設置選項(這通常是現代實現中的預設設置)。traditional-vi``^``$``\*``\.``magic``:set magic``vi

上述替換將替換所有出現的(例如)

group 1

group Test

做同樣事情的另一種方法是:

:g/^group/s/[0-9A-Za-z_]$/Test/

要不就

:g/^group/s/.$/Test/

如果您不需要對行中的最後一個字元過於小心。

如果您想替換該行的最後一個單詞(而不僅僅是最後一個字元):

:g/^group/s/[^ ]*$/Test/

在傳統vi的沒有magic選項集的情況下,這可能必須寫成

:g/^group/s/\[^ ]\*$/Test/

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