2015-10-28 27 views
0

我使用vim找到一個四位數字並替換最後一位數字,但不同於使用${1}值作爲反向引用的新學校sed,它使用\1並且我努力工作附加下面的數字。我需要做的:反向引用搜索替換爲結尾數字

  • 一個= 1234 =>α= 1235
  • B = 1374 => B = 1375

我想我需要s/\(=[0-9]\{3\}\)4/=\1<xxx>5/g 其中是零長度的字符。 我試過s/\(=[0-9]\{3\}\)4/=${1}5/g但它沒有使用反向引用。 有趣的是s/\(=[0-9]\{3\}\)4/=\15/g是否正確,但有一個實際上有15個後退參考組的角落案例...

+1

個人而言,我只是用搜索模式找到四位數字和''每一個,因爲我發現他們... –

+0

沒有15個反向引用組 –

回答

4

只能有9個子匹配。 \1\9\0這是整個比賽。你可以在:help s/\1:help /\1的幫助中看到這個,它只列出1到9.所以對於尾隨號碼沒有不明確的地方。 \15始終是第一個子匹配,然後是5.如果您有多於9個,您也會得到一個錯誤。

如果使用所有這些,則您的正則表達式可能太複雜。


如果您想在替代命令中進行添加,我會使用表達式替換。這是通過將\=作爲替換的開始來完成的,它後面的東西被視爲vim表達式。

:s/=\zs\d\+/\=submatch(0) + 1/g 

此功能的幫助頁面是:help sub-replace-expression

+0

精彩:我沒有意識到Posix正則表達式/ GNU-ERE限制爲0-9;我發現這個比較正則表達式反向引用限制:http://www.dziury.eu/sennik/index.php?artikle=1296 – rupert160

+0

@ rupert160 vim正則表達式不是Posix或GNU-ERE。 – FDinoff